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!"));
        }
Example #2
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));
            }
        }
Example #3
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"));
                }
            }
        }
        public cResultado calculateFreightAndDelivery(List <Item> items, string destiny, decimal value)
        {
            CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();

            string  totalWeight   = calculateTotalWeight(items).ToString();
            decimal totalLength   = calculateTotalLength(items);
            decimal totalHeight   = calculateTotalHeight(items);
            decimal totalWidth    = calculateTotalWidth(items);
            decimal totalDiameter = calculateTotalDiameter(items);

            return(correios.CalcPrecoPrazo("", "", "40010", "01311200", destiny, totalWeight, 1, totalLength, totalHeight, totalWidth, totalDiameter, "N", value, "S"));
        }
Example #5
0
        /// <summary>
        /// Calculates the shipping costs with Correios web service.
        /// </summary>
        /// <returns>List of results returned from Correios web service.</returns>
        public cResultado Calculate()
        {
            int count = Pacotes.Count();

            if (count == 0)
            {
                return(null);
            }
            else if (count == 1)
            {
                System.Threading.Thread.CurrentThread.CurrentCulture = PtBrCulture;

                Pacote p = Pacotes[0];

                try
                {
                    using (CalcPrecoPrazoWS client = new CalcPrecoPrazoWS())
                    {
#if DEBUG
                        client.Proxy = new System.Net.WebProxy("127.0.0.1:8888");
#endif
                        return(client.CalcPrecoPrazo(
                                   CodigoEmpresa,
                                   Senha,
                                   Servicos,
                                   CepOrigem,
                                   CepDestino,
                                   p.Peso.ToString("0.00", PtBrCulture),
                                   (p.FormatoPacote ? 1 : 2),
                                   p.Comprimento,
                                   p.Altura,
                                   p.Largura,
                                   p.Diametro,
                                   (MaoPropria ? "S" : "N"),
                                   p.ValorDeclarado,
                                   (AvisoRecebimento ? "S" : "N")));
                    }
                }
                catch (Exception ex)
                {
                    _logger.Error("Plugin.Shipping.Correios: - Erro ao chamar WS dos Correios.\n" + ex.ToString());

                    return(null);
                }
            }
            else
            {
                //Para uma lógica futura de divisão de produtos em pacotes.
                return(null);
            }
        }
Example #6
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 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));
            }
        }
        private cResultado calculaFretePrazoEntrega(Order order)
        {
            string  codigoEmpresa           = "";         //Empresa não conveniada com os correios
            string  senhaEmpresa            = "";         //Empresa não conveniada com os correios
            string  codigoServico           = "40010";    //Sedex varejo
            string  cepOrigem               = "37540000"; //Empresa situada em Santa Rita do Sapucaí
            string  cepDestino              = recuperaCepDoUsuarioNoCRM(order.userName);
            string  pesoTotalEmKg           = calculaPesoTotal(order).ToString();
            int     formatoEmbalagem        = 1; //Formato de envio fixo usando caixa
            decimal comprimentoTotalEmCm    = calculaComprimentoTotal(order);
            decimal itemDeMaiorAlturaEmCm   = calculaMaiorAltura(order);
            decimal itemDeMaiorLarguraEmCm  = calculaMaiorLargura(order);
            decimal itemDeMaiorDiametroEmCm = 0;      //Fixado em zero dado que só enviaremos produtos em caixa e não em embalagem do tipo Rolo ou Prisma
            string  avisoMaoPropia          = "N";
            decimal valorDeclarado          = 0;
            string  avisoRecebimento        = "N";

            CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();

            return(correios.CalcPrecoPrazo(codigoEmpresa, senhaEmpresa, codigoServico, cepOrigem, cepDestino, pesoTotalEmKg, formatoEmbalagem,
                                           comprimentoTotalEmCm, itemDeMaiorAlturaEmCm, itemDeMaiorLarguraEmCm, itemDeMaiorDiametroEmCm, avisoMaoPropia, valorDeclarado, avisoRecebimento));
        }
        public IHttpActionResult CalculaFrete(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Pedido não encontrado!")));
            }

            if (!order.userName.Equals(User.Identity.Name) &&
                User.IsInRole("USER"))
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Usuário não autorizado!")));
            }

            if (order.OrderItems.Count == 0)
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "Não há items no pedido!")));
            }

            if (order.status != "Novo")
            {
                return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "O Status do pedido deve ser Novo!")));
            }

            //Busca o cep pelo e-mail
            CRMRestClient crmClient = new CRMRestClient();
            Customer      customer  = crmClient.GetCustomerByEmail(order.userName);

            if (customer == null)
            {
                return(BadRequest("Falha ao consultar o CRM"));
            }

            order.setPesoPedido(); //Função que efetua a soma dos pesos dos produtos contidos no pedido
            decimal comp = order.getComprimento();
            decimal larg = order.getLargura();
            decimal alt  = order.getAltura();
            //decimal diam = (decimal) Math.Sqrt(Math.Pow(Decimal.ToDouble(comp), 2) + Math.Pow(Decimal.ToDouble(larg), 2)); //Cálculo do diametro antes de eu ter visto que o valor era atributo do produto
            decimal diam = order.getDiametro();

            order.setPrecoPedido();                                                                                                                                                                                 //Função que efetua a soma dos preços dos produtos contidos no pedido

            string           frete = "0", prazo = "0";                                                                                                                                                              // O frete será calculado tendo como base o cep de origem sendo do Paraná (59950-000)
            CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
            cResultado       resultado = correios.CalcPrecoPrazo("", "", "04510", "59950000", customer.zip.Replace("-", ""), order.peso_pedido.ToString(), 1, comp, alt, larg, diam, "N", order.preco_pedido, "S"); //Este cálculo mostrou-se ser muito sensivel ao tamanho dos pacotes, conforme dito por e-mail.

            if (!resultado.Servicos[0].Erro.Equals("0"))
            {
                return(BadRequest("Código do erro: " + resultado.Servicos[0].Erro + " - " + resultado.Servicos[0].MsgErro));
            }

            frete = resultado.Servicos[0].Valor;
            prazo = resultado.Servicos[0].PrazoEntrega;

            // Atualiza o frete recebido e o prazo de entrega previsto supondo que o pedido seja fechado hoje
            order.preco_frete  = Decimal.Parse(frete.Replace(",", "."));
            order.data_entrega = TimeZoneInfo.ConvertTime(DateTime.Now.AddDays(Double.Parse(prazo)), TimeZoneInfo.FindSystemTimeZoneById("E. South America Standard Time")).ToString("dd-MM-yyyy HH:mm:ss");

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

            try {
                db.SaveChanges();
            } catch (DbUpdateConcurrencyException) {
                if (!OrderExists(id))
                {
                    return(ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.NotFound, "Pedido não encontrado!")));
                }
                else
                {
                    throw;
                }
            }

            return(Ok("Frete calculado no valor de: " + frete + " e entrega estimada em " + prazo + " dia(s)"));
        }
Example #10
0
        public IHttpActionResult CalculaFreteData(int id)
        {
            string   frete;
            Order    order = db.Orders.Find(id);
            Customer customer;

            if (order == null)
            {
                return(BadRequest("O pedido não existe."));
            }

            CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();

            if (IsAuthorized(order.Email))
            {
                CRMRestClient client = new CRMRestClient();
                customer = client.GetCustomerByEmail(User.Identity.Name);

                if (customer == null)
                {
                    return(BadRequest("Falha ao consultar CEP: usuário não existe."));
                }
                else
                {
                    //.count = .length
                    if (order.OrderItems.Count <= 0)
                    {
                        return(BadRequest("O pedido não contêm itens."));
                    }

                    decimal pesoTotal        = 0;
                    decimal larguraTotal     = 0;
                    decimal comprimentoTotal = 0;
                    decimal alturaTotal      = 0;
                    decimal diametroTotal    = 0;

                    foreach (OrderItem orderItem in order.OrderItems)
                    {
                        if (Convert.ToInt32(orderItem.Product.peso) > 0)
                        {
                            pesoTotal = pesoTotal + (Convert.ToInt32(orderItem.Product.peso) * orderItem.Quantity);
                        }
                        if (Convert.ToInt32(orderItem.Product.largura) > 0)
                        {
                            larguraTotal += (Convert.ToInt32(orderItem.Product.largura) * orderItem.Quantity);
                        }
                        if (Convert.ToInt32(orderItem.Product.comprimento) > 0)
                        {
                            if (Convert.ToInt32(orderItem.Product.comprimento) > comprimentoTotal)
                            {
                                comprimentoTotal = Convert.ToInt32(orderItem.Product.comprimento);
                            }
                        }
                        if (Convert.ToInt32(orderItem.Product.altura) > 0)
                        {
                            if (Convert.ToInt32(orderItem.Product.altura) > alturaTotal)
                            {
                                alturaTotal = Convert.ToInt32(orderItem.Product.altura);
                            }
                        }
                        if (Convert.ToInt32(orderItem.Product.diametro) > 0)
                        {
                            if (Convert.ToInt32(orderItem.Product.diametro) > diametroTotal)
                            {
                                diametroTotal = Convert.ToInt32(orderItem.Product.diametro);
                            }
                        }
                    }


                    string  nCdServico          = "40010";
                    string  sCdCepOrigem        = "69096010";
                    string  sCdCepDestino       = customer.zip.Trim().Replace("-", "");
                    string  nVIPeso             = pesoTotal.ToString();
                    int     nCdFormato          = 1;
                    decimal nVIComprimento      = comprimentoTotal;
                    decimal nVIAltura           = alturaTotal;
                    decimal nVILargura          = larguraTotal;
                    decimal nVIDiametro         = diametroTotal;
                    string  sCdMaoPropria       = "N";
                    decimal nVIValorDeclarado   = order.PrecoTotal;
                    string  sCdAvisoRecebimento = "S";

                    cResultado resultado;

                    resultado = correios.CalcPrecoPrazo("", "", nCdServico, sCdCepOrigem, sCdCepDestino, nVIPeso, nCdFormato,
                                                        nVIComprimento, nVIAltura, nVILargura, nVIDiametro, sCdMaoPropria, nVIValorDeclarado, sCdAvisoRecebimento);

                    if (resultado == null)
                    {
                        return(BadRequest("Falha ao calcular o frete e prazo de entrega."));
                    }
                    if (!resultado.Servicos[0].MsgErro.Equals(""))
                    {
                        return(BadRequest("Falha ao calcular o frete e prazo de entrega: " + resultado.Servicos[0].MsgErro));
                    }

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


                    order.PrecoFrete  = decimal.Parse(resultado.Servicos[0].Valor);
                    order.DataEntrega = DateTime.Now.AddDays(int.Parse(resultado.Servicos[0].PrazoEntrega));
                    order.PesoTotal   = pesoTotal;
                    order.PrecoTotal  = order.PrecoTotal + decimal.Parse(resultado.Servicos[0].Valor);

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

                    return(Ok(db.Orders.Find(id)));
                }
            }
            else
            {
                return(BadRequest("Usuário não autorizado."));
            }
        }
Example #11
0
        public List <Shipping> GetShipping(string cep)
        {
            string origem      = "04094-050";
            string destino     = cep;
            double peso        = 0;
            int    largura     = 0;
            int    altura      = 0;
            int    comprimento = 0;

            Shipping freteFacil = new Shipping
            {
                Id   = "frete-facil",
                Name = "PayPal Frete Fácil"
            };

            Shipping freteECT = new Shipping
            {
                Id   = "sedex",
                Name = "SEDEX Correios"
            };

            foreach (Item item in items)
            {
                if (item.Product.Length > comprimento)
                {
                    comprimento = item.Product.Length;
                }

                if (item.Product.Width > largura)
                {
                    largura = item.Product.Width;
                }

                altura += item.Product.Height;
                peso   += item.Product.Weight;
            }

            FreteFacilApi wsFreteFacil = PayPalApiFactory.instance.FreteFacil();

            freteFacil.Value = wsFreteFacil.getPreco(
                origem,
                destino,
                largura,
                altura,
                comprimento,
                peso.ToString()
                );

            CalcPrecoPrazoWS wsECT = new CalcPrecoPrazoWS();

            freteECT.Value = Double.Parse(wsECT.CalcPrecoPrazo(
                                              "", "", "40010",
                                              origem,
                                              destino,
                                              peso.ToString(),
                                              1,
                                              comprimento,
                                              altura,
                                              largura,
                                              0, "n", 0, "n"
                                              ).Servicos[0].Valor);

            return(new List <Shipping> {
                freteFacil,
                freteECT
            });
        }
Example #12
0
        public IHttpActionResult GetFreightAndDate(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(BadRequest("O pedido não existe."));
            }

            if (IsAuthorized(order.Email))
            {
                Customer customer;

                try
                {
                    CRMRestClient client = new CRMRestClient();
                    customer = client.GetCustomerByEmail(User.Identity.Name);
                }
                catch (Exception e)
                {
                    return(BadRequest("Falha ao consultar CEP: ocorreu um erro ao acessar o serviço de CRM."));
                }

                if (customer == null)
                {
                    return(BadRequest("Falha ao consultar CEP: usuário não existente."));
                }
                else
                {
                    if (order.OrderItems.Count <= 0)
                    {
                        return(BadRequest("O pedido não contêm itens."));
                    }

                    decimal alturaFinal      = 0;
                    decimal larguraFinal     = 0;
                    decimal comprimentoFinal = 0;
                    decimal diametroFinal    = 0;

                    decimal pesoFinal = 0;

                    foreach (OrderItem oi in order.OrderItems)
                    {
                        // Incrementando peso
                        pesoFinal += oi.Product.Peso * oi.Quantidade;

                        // Incrementando a largura
                        larguraFinal += (oi.Product.Largura * oi.Quantidade);

                        // Pegando o maior comprimento
                        if (oi.Product.Comprimento > comprimentoFinal)
                        {
                            comprimentoFinal = oi.Product.Comprimento;
                        }

                        // Pegando a maior largura
                        if (oi.Product.Altura > alturaFinal)
                        {
                            alturaFinal = oi.Product.Altura;
                        }

                        // Pegando o maior diametro
                        if (oi.Product.Diametro > diametroFinal)
                        {
                            diametroFinal = oi.Product.Diametro;
                        }
                    }

                    CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();

                    string  nCdServico          = "40010"; // SEDEX
                    string  sCdCepOrigem        = "69096010";
                    string  sCdCepDestino       = customer.zip.Trim().Replace("-", "");
                    string  nVIPeso             = pesoFinal.ToString();
                    int     nCdFormato          = 1; // Caixa
                    decimal nVIComprimento      = comprimentoFinal;
                    decimal nVIAltura           = alturaFinal;
                    decimal nVILargura          = larguraFinal;
                    decimal nVIDiametro         = diametroFinal;
                    string  sCdMaoPropria       = "N";
                    decimal nVIValorDeclarado   = order.PrecoTotal;
                    string  sCdAvisoRecebimento = "S";

                    cResultado corresiosResult;
                    try
                    {
                        corresiosResult = correios.CalcPrecoPrazo("", "", nCdServico, sCdCepOrigem, sCdCepDestino, nVIPeso, nCdFormato,
                                                                  nVIComprimento, nVIAltura, nVILargura, nVIDiametro, sCdMaoPropria, nVIValorDeclarado, sCdAvisoRecebimento);
                    }
                    catch (Exception e)
                    {
                        return(BadRequest("Falha ao calcular o frete e prazo de entrega: ocorreu um erro ao tentar acessar o serviço dos correios."));
                    }

                    if (!corresiosResult.Servicos[0].MsgErro.Equals(""))
                    {
                        return(BadRequest("Falha ao calcular o frete e prazo de entrega: " + corresiosResult.Servicos[0].MsgErro));
                    }

                    int     prazo      = int.Parse(corresiosResult.Servicos[0].PrazoEntrega);
                    decimal valorFrete = decimal.Parse(corresiosResult.Servicos[0].Valor);

                    // Atualizar pedido
                    order.PrecoFrete  = valorFrete;
                    order.DataEntrega = DateTime.Now.AddDays(prazo);
                    order.PesoTotal   = pesoFinal;
                    order.PrecoTotal += valorFrete;

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

                    return(Ok(db.Orders.Find(id)));
                }
            }
            else
            {
                return(BadRequest("Acesso não autorizado."));
            }
        }
        public IHttpActionResult CalcShipping(int id)
        {
            var order = db.Orders.Find(id);

            if (order == null)
            {
                return(BadRequest("The order cannot be found."));
            }
            if (!order.status.Equals("NOVO") && !order.status.Equals("novo"))
            {
                return(BadRequest("The status of this order is not 'NOVO'."));
            }
            if (!User.IsInRole("ADMIN") && !User.Identity.Name.Equals(order.email))
            {
                return(BadRequest("User not Authorized."));
            }
            if (order.OrderItems == null || order.OrderItems.Count == 0)
            {
                return(BadRequest("This order doesn't have any items."));
            }
            Customer customer;

            try
            {
                CRMRestClient crmClient = new CRMRestClient();

                customer = crmClient.GetCustomerByEmail(order.email);
            }
            catch (Exception e)
            {
                return(BadRequest("It is not possible to access the CRM service."));
            }
            cResultado resultado;

            try
            {
                decimal totalWeight   = 0;
                decimal totalWidth    = 0;
                decimal totalHeight   = 0;
                decimal totalDiameter = 0;
                decimal totalLength   = 0;
                decimal totalOrder    = 0;
                foreach (OrderItem orderItem in order.OrderItems)
                {
                    var product = db.Products.Find(orderItem.ProductId);
                    totalHeight   = product.height;
                    totalDiameter = product.diameter;
                    totalLength   = product.length;
                    for (int i = 0; i < orderItem.quantity; i++)
                    {
                        totalWeight += product.weight;
                        totalWidth  += product.width;
                        totalOrder  += product.price;
                    }
                }
                CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();
                try
                {
                    resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000",
                                                        customer.zip, totalWeight.ToString(), 1, totalLength, totalHeight, totalWidth,
                                                        totalDiameter, "N", totalOrder, "S");
                }
                catch (Exception e)
                {
                    return(BadRequest("It is not possible to access the CORREIOS service."));
                }

                if (!resultado.Servicos[0].Erro.Equals("0"))
                {
                    return(BadRequest("Correios response error. Error code: " + resultado.Servicos[0].Codigo + " | Message: " + resultado.Servicos[0].MsgErro));
                }
                try
                {
                    NumberFormatInfo nfi = new CultureInfo("pt-BR", false).NumberFormat;
                    order.shippingPrice    = decimal.Parse(resultado.Servicos[0].Valor, nfi);
                    order.orderTotalPrice  = totalOrder;
                    order.orderTotalWeight = totalWeight;
                    DateTime dt = DateTime.Today.AddDays(Convert.ToInt16(resultado.Servicos[0].PrazoEntrega));
                    order.deliveryDate = dt;
                }
                catch (Exception e2)
                {
                    return(BadRequest("The order was not updated."));
                }
            }
            catch (Exception e)
            {
                return(BadRequest("It is not possible to access the CORREIOS service."));
            }
            db.Entry(order).State = EntityState.Modified;
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!OrderExists(id))
                {
                    return(BadRequest("This order doesn't exist."));
                }
            }
            return(Ok(resultado));
        }
        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 IHttpActionResult GetFrete(int orderId)
        {
            decimal    pesoPedido = 0, alturaTotal = 0, largura = 0, comprimento = 0, diametro = 0, precoTotal = 0, valorFrete = 0;
            String     CEPDestino, prazoEntrega;
            cResultado resultado;
            Order      order = db.Orders.Where(p => p.Id == orderId).FirstOrDefault();

            if (order == null)
            {
                return(BadRequest("Pedido de N. " + orderId + " não exisrte."));
            }
            else if (order.OrderItems.Count == 0)
            {
                return(BadRequest("Pedido de N. " + orderId + " não possui itens."));
            }
            else if (order.statusPedido != "novo")
            {
                return(BadRequest("Pedido de N. " + orderId + " com status diferente de 'novo'"));
            }


            if ((order.userEmail == User.Identity.Name) || (User.IsInRole("ADMIN")))
            {
                CRMRestClient crmClient = new CRMRestClient();
                try
                {
                    Customer customer = crmClient.GetCustomerByEmail(User.Identity.Name);
                    CEPDestino = customer.zip;
                }
                catch
                {
                    return(BadRequest("Não foi possivel acessar o serviço de CRM.Verifique se o e-mail do usuário existe no crm"));
                }

                for (int itensPed = 0; itensPed < order.OrderItems.Count; itensPed++)
                {
                    pesoPedido  += (order.OrderItems.ElementAt(itensPed).quantidade *order.OrderItems.ElementAt(itensPed).Product.peso);
                    alturaTotal += order.OrderItems.ElementAt(itensPed).Product.altura;
                    precoTotal  += (order.OrderItems.ElementAt(itensPed).quantidade *order.OrderItems.ElementAt(itensPed).Product.preco);


                    if (order.OrderItems.ElementAt(itensPed).Product.largura > largura)
                    {
                        largura = order.OrderItems.ElementAt(itensPed).Product.largura;
                    }

                    if (order.OrderItems.ElementAt(itensPed).Product.comprimento > comprimento)
                    {
                        comprimento = (order.OrderItems.ElementAt(itensPed).quantidade *order.OrderItems.ElementAt(itensPed).Product.comprimento);
                    }

                    diametro = order.OrderItems.ElementAt(itensPed).Product.diametro;
                }

                CalcPrecoPrazoWS correios = new CalcPrecoPrazoWS();
                try
                {
                    resultado    = correios.CalcPrecoPrazo("", "", "40010", "37550000", CEPDestino, pesoPedido.ToString(), 1, comprimento, alturaTotal, largura, diametro, "N", 0, "S");
                    prazoEntrega = resultado.Servicos.ElementAt(0).PrazoEntrega;
                }
                catch
                {
                    return(BadRequest("Ocorreu um erro ao acessar o servicço dos Correios"));
                }

                if (resultado.Servicos[0].Erro.Equals("0"))
                {
                    NumberFormatInfo nfi = new CultureInfo("pt-BR", false).NumberFormat;
                    valorFrete = decimal.Parse(resultado.Servicos[0].Valor, nfi);
                    int      prazo = int.Parse(resultado.Servicos.Single().PrazoEntrega);
                    DateTime atual = DateTime.Now;

                    atual = atual.AddDays(prazo);

                    order.pesoPedido  = pesoPedido;
                    order.precoFrete  = valorFrete;
                    order.precoPedido = precoTotal;
                    order.dataEntrega = atual;

                    db.SaveChanges();

                    return(Ok("Frete Pedido N. " + orderId + " calculado com Sucesso. Frete: R$ " + resultado.Servicos.Single().Valor + " - Prazo: " + resultado.Servicos.Single().PrazoEntrega + " dias )"));
                }
                else
                {
                    return(BadRequest("Código do erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                }
            }
            else
            {
                return(Ok("Acesso não autorizado."));
            }
        }
        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));
            }
        }
        public IHttpActionResult CalculaFrete(int id)
        {
            Order order = db.Orders.Find(id);

            if (User.Identity.Name == order.userMail || User.IsInRole("ADMIN"))
            {
                if (order == null)
                {
                    return(BadRequest("Pedido não existe!"));
                }

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

                if (order.status != "novo")
                {
                    return(BadRequest("Pedido não está com status de novo!"));
                }

                string cepDest = getCEP(order.userMail);
                if (cepDest == "0")
                {
                    return(BadRequest("Falha ao consultar o CRM!"));
                }

                decimal valorTotal = calcValorTotal(order);
                decimal peso       = calcPesoTotal(order);
                //para calculo do comprimento, altura, largura e diametro sempre pego o valor mais alto de cada item no pedido.
                decimal comprimento = (calcComprimento(order) < 16) ? 16 : calcComprimento(order);
                decimal altura      = calcAltura(order);
                decimal largura     = (calcLargura(order) < 11) ? 11 : calcLargura(order);
                decimal diametro    = calcDiametro(order);

                string           freteMsg;
                string           frete;
                DateTime         prazoEntrega;
                CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
                cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", cepDest, peso.ToString(), 1,
                                                                     comprimento, altura, largura, diametro, "N", valorTotal, "S");

                if (resultado.Servicos[0].Erro.Equals("0"))
                {
                    frete        = resultado.Servicos[0].Valor;
                    prazoEntrega = DateTime.Today.AddDays(Convert.ToInt16(resultado.Servicos[0].PrazoEntrega));
                    freteMsg     = "Valor do frete: " + resultado.Servicos[0]
                                   .Valor + " - Prazo de entrega: " + resultado.Servicos[0].PrazoEntrega + " dia(s)";

                    order.pesoTotal   = peso;
                    order.precoFrete  = decimal.Parse(frete, new CultureInfo("pt-BR", false).NumberFormat);
                    order.precoTotal  = valorTotal;
                    order.dataEntrega = prazoEntrega;

                    db.Entry(order).State = EntityState.Modified;
                    try
                    {
                        db.SaveChanges();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        if (!OrderExists(id))
                        {
                            return(NotFound());
                        }
                    }

                    return(Ok(freteMsg));
                }
                else
                {
                    return(BadRequest("Código do erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                }
            }
            else
            {
                return(BadRequest("Acesso negado!"));
            }
        }
Example #18
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"));
                }
            }
        }
        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 CalculaFrete(int id)
        {
            Order order = db.Orders.Find(id);

            if (order == null)
            {
                return(NotFound());
            }
            if (order.email.Equals(User.Identity.Name) || User.IsInRole("ADMIN"))
            {
                if (!order.status.Equals("novo"))
                {
                    return(BadRequest("Pedido com status diferente de: novo!"));
                }
                if (order.OrderItems == null)
                {
                    return(BadRequest("Pedido sem itens de Produto"));
                }

                //Pegando o Cliente do Pedido:
                CRMRestClient crmClient = new CRMRestClient();
                Customer      customer  = crmClient.GetCustomerByEmail(order.email);
                if (customer == null)
                {
                    return(BadRequest("Não foi possicel acessar o CRM."));
                }

                //Calculando dimensoes da caixa para embalar os Produtos
                decimal AlturaDoMaiorProduto   = 0;
                decimal ComprimentoDosProdutos = 0;
                decimal LaguraDoMaiorProduto   = 0;
                decimal DiametroDoMaiorProduto = 0;
                decimal PesoDosProdutos        = 0;
                decimal PrecoDosProdutos       = 0;

                for (int i = 0; i < order.OrderItems.Count; i++)
                {
                    PrecoDosProdutos       += order.OrderItems.ElementAt(i).Product.preco;
                    PesoDosProdutos        += order.OrderItems.ElementAt(i).Product.peso;
                    ComprimentoDosProdutos += order.OrderItems.ElementAt(i).Product.comprimento *order.OrderItems.ElementAt(i).QuantidadeDoProduto;
                    if (order.OrderItems.ElementAt(i).Product.altura > AlturaDoMaiorProduto)
                    {
                        AlturaDoMaiorProduto = order.OrderItems.ElementAt(i).Product.altura;
                    }
                    if (order.OrderItems.ElementAt(i).Product.largura > LaguraDoMaiorProduto)
                    {
                        LaguraDoMaiorProduto = order.OrderItems.ElementAt(i).Product.largura;
                    }
                    if (order.OrderItems.ElementAt(i).Product.diametro > DiametroDoMaiorProduto)
                    {
                        DiametroDoMaiorProduto = order.OrderItems.ElementAt(i).Product.diametro;
                    }
                }

                string           frete;
                CalcPrecoPrazoWS correios  = new CalcPrecoPrazoWS();
                cResultado       resultado = correios.CalcPrecoPrazo("", "", "40010", "37540000", customer.zip, PesoDosProdutos.ToString(), 1, ComprimentoDosProdutos, AlturaDoMaiorProduto, LaguraDoMaiorProduto, DiametroDoMaiorProduto, "N", PrecoDosProdutos, "S");
                if (resultado.Servicos[0].Erro.Equals("0"))
                {
                    frete = "Identificado do Pedido: " + order.Id + " - Valor do seu frete: " + resultado.Servicos[0].Valor + " - Prazo de entrega: " + resultado.Servicos[0].PrazoEntrega + " dia(s)";

                    //Atualizando o Pedido:
                    string FreteCalculado = resultado.Servicos[0].Valor.Replace(",", ".");
                    order.precoFrete    = Convert.ToDecimal(FreteCalculado);
                    order.precoDoPedido = PrecoDosProdutos + Convert.ToDecimal(FreteCalculado);
                    order.pesoTotal     = PesoDosProdutos;
                    order.dataDaEntrega = order.dataDoPedido.AddDays(Convert.ToDouble(resultado.Servicos[0].PrazoEntrega));

                    //Salvando o Pedido atualizado:
                    db.Entry(order).State = EntityState.Modified;

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

                    //Retorno da mensagem do frete
                    return(Ok(frete));
                }
                else
                {
                    return(BadRequest("Código do erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
                }
            }
            else
            {
                return(StatusCode(HttpStatusCode.Forbidden));
            }
        }
Example #21
0
 public Frete()
 {
     ws = new CalcPrecoPrazoWS();
 }
        //public List<TodoItem> Items { get; private set; } = new List<TodoItem>();

        public SoapService()
        {
            todoService = new br.com.correios.ws.CalcPrecoPrazoWS();
            //todoService.Url = Constants.SoapUrl;
        }
Example #23
0
        private void button1_Click(object sender, EventArgs e)
        {
            CalcPrecoPrazoWS cs = new CalcPrecoPrazoWS();
            cResultado       res_sedex;
            cResultado       res_pac;



            pnl_resultado_calc_prec_praz.Visible = false;
            lbl_vlrtotalsedex.Text = "";
            lbl_prazo_sedex.Text   = "";
            lbl_vlrtotalpac.Text   = "";
            lbl_prazopac.Text      = "";



            string SEDEX       = "40010";
            string PAC         = "41106";
            string CEP_Origem  = txtbox_ceporigem.Text.ToString();
            string CEP_Destino = txtbox_cepdestino.Text.ToString();
            string VlPeso      = txtbox_peso.Text.ToString(); // kg
            int    formatoencomenda;                          //Formato da encomenda (incluindo embalagem).

            //Valores possíveis: 1, 2 ou 3
            //1 – Formato caixa/pacote
            //2 – Formato rolo/prisma
            //3 - Envelope

            System.Net.ServicePointManager.Expect100Continue = false;

            if (PegaDadosEndereco(CEP_Origem, CEP_Destino) == -1)
            {
                return;
            }



            Int32.TryParse(cmbbox_tipoencomenda.Text.Substring(0, 1), out formatoencomenda);

            decimal Comprimento;

            Decimal.TryParse(txtbox_compimento.Text.ToString(), out Comprimento);
            decimal altura;

            Decimal.TryParse(txtbox_altura.Text.ToString(), out altura);
            decimal largura;

            Decimal.TryParse(txtbox_largura.Text.ToString(), out largura);
            decimal diametro;

            Decimal.TryParse(txtbox_diametro.Text.ToString(), out diametro);
            string  sCdMaoPropria = (chkbox_maopropria.Checked == true)?"S":"N";
            decimal VlrDeclardo;// senao optar pelo serviço informar zeros

            Decimal.TryParse(txtbox_valordeclarado.Text.ToString(), out VlrDeclardo);
            string sCdAvisoRecebimento = (chkbox_avisorecebimento.Checked == true)?"S":"N";

            //precisa da linha abaixo para remover o erro ==> The request failed with HTTP status 417: Expectation failed.

            System.Net.ServicePointManager.Expect100Continue = false;
            try
            {
                pnl_resultado_calc_prec_praz.Visible             = true;
                System.Net.ServicePointManager.Expect100Continue = false;
                res_sedex = cs.CalcPrecoPrazo("", "", SEDEX, CEP_Origem, CEP_Destino, VlPeso, formatoencomenda,
                                              Comprimento, altura, largura, diametro, sCdMaoPropria, VlrDeclardo, sCdAvisoRecebimento);

                //if (res_sedex.Servicos[0].Erro.Length > 0)
                //    MessageBox.Show(res_sedex.Servicos[0].MsgErro, "Sedex ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error);

                lbl_vlrtotalsedex.Text += res_sedex.Servicos[0].Valor.ToString();
                lbl_prazo_sedex.Text   += res_sedex.Servicos[0].PrazoEntrega.ToString() + " Dia(s)";

                res_pac = cs.CalcPrecoPrazo("", "", PAC, CEP_Origem, CEP_Destino, VlPeso, formatoencomenda,
                                            Comprimento, altura, largura, diametro, sCdMaoPropria, VlrDeclardo, sCdAvisoRecebimento);

                lbl_vlrtotalpac.Text += res_pac.Servicos[0].Valor.ToString();
                lbl_prazopac.Text    += res_pac.Servicos[0].PrazoEntrega.ToString() + " Dia(s)";

                if (!res_sedex.Servicos[0].Erro.Equals("0"))
                {
                    MessageBox.Show(res_sedex.Servicos[0].MsgErro, "Sedex ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (!res_pac.Servicos[0].Erro.Equals("0"))
                {
                    MessageBox.Show(res_pac.Servicos[0].MsgErro, "PAC ERRO", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception exp)
            {
                MessageBox.Show(exp.ToString(), "ERRO Execute", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #24
0
        public IHttpActionResult CalculaFrete(long id, Order order)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != order.Id)
            {
                return(BadRequest("Pedido não encontrado!"));
            }


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

            order.totalPrice  = 0;
            order.totalWeight = 0;
            totalWidth        = 0;
            maxHeight         = 0;
            maxLength         = 0;
            maxDiameter       = 0;

            if (!isAuthenticated(order.email))
            {
                return(BadRequest("Acesso não autorizado!"));
            }

            if (customer == null)
            {
                return(BadRequest("Falha ao consultar o CRM"));
            }

            if (order.OrderItems.Count == 0)
            {
                return(BadRequest("Pedido não contem itens!"));
            }

            if (!order.orderStatus.Equals("novo"))
            {
                return(BadRequest("Pedido com status diferente de novo!"));
            }

            getFreightParameters(order);

            cResultado resultado = correios.CalcPrecoPrazo("", "", " 04014", "04236094", customer.zip.Replace("-", ""), Convert.ToString(order.totalWeight), 1, maxLength, maxHeight, totalWidth, maxDiameter, "N", order.totalPrice, "S");

            if (!resultado.Servicos[0].Erro.Equals("0"))
            {
                return(BadRequest("Falha na consulta dos correios, erro: " + resultado.Servicos[0].Erro + "-" + resultado.Servicos[0].MsgErro));
            }

            order.freightPrice = Decimal.Parse(resultado.Servicos[0].Valor.Replace(",", "."));

            order.deliveryDate = DateTime.Now.AddDays(Double.Parse(resultado.Servicos[0].PrazoEntrega));

            order.totalPrice = order.totalPrice + order.freightPrice;

            string result = "Valor do frete: " + order.freightPrice + " - Prazo de entrega até : " + order.deliveryDate;

            db.Entry(order).State = EntityState.Modified;
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!OrderExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(Ok(result));
        }
Example #25
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"));
            }
        }
Example #26
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());
        }