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!"));
        }
示例#2
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"));
                }
            }
        }
        private string getCEP(string mail)
        {
            string        cep       = "0";
            CRMRestClient crmClient = new CRMRestClient();
            Customer      customer  = crmClient.GetCustomerByEmail(mail);

            if (customer != null)
            {
                cep = customer.zip;
            }

            return(cep);
        }
        public IHttpActionResult ObtemCEP()
        {
            CRMRestClient crmClient = new CRMRestClient();
            Customer      customer  = crmClient.GetCustomerByEmail(User.Identity.Name);

            if (customer != null)
            {
                return(Ok(customer.zip));
            }
            else
            {
                return(BadRequest("Falha	ao	consultar	o	CRM"));
            }
        }
示例#5
0
        private string ObtemCEP(IPrincipal user)
        {
            CRMRestClient crmClient = new CRMRestClient();
            Customer      customer  = crmClient.GetCustomerByEmail(user.Identity.Name);

            if (customer != null)
            {
                return(customer.zip);
            }
            else
            {
                return(null);
            }
        }
示例#6
0
        public string SearchCep(string email)
        {
            CRMRestClient crmClient = new CRMRestClient();
            Customer      customer  = crmClient.GetCustomerByEmail(email);

            if (customer != null)
            {
                return(customer.zip);
            }
            else
            {
                return(null);
            }
        }
示例#7
0
        public IHttpActionResult ObtemFreteData(int id)
        {
            Order         order     = db.Orders.Find(id);
            CRMRestClient crmClient = new CRMRestClient();
            Customer      customer  = crmClient.GetCustomerByEmail(User.Identity.Name);

            if (customer != null)
            {
                return(Ok(customer.zip));
            }
            else
            {
                return(BadRequest("Falha	ao	consultar	o	CRM"));
            }
        }
示例#8
0
 public string FindCep(string email)
 {
     try
     {
         CRMRestClient crmClient = new CRMRestClient();
         Customer      customer  = crmClient.GetCustomerByEmail(User.Identity.Name);
         if (customer == null)
         {
             return("NOCUSTOMER");
         }
         return(customer.zip);
     }
     catch (Exception)
     {
         return("FAULT");
     }
 }
        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."));
            }
        }
示例#10
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 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 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));
        }
示例#13
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."));
            }
        }
        private string recuperaCepDoUsuarioNoCRM(string userEmail)
        {
            CRMRestClient crmClient = new CRMRestClient();

            return(crmClient.GetCustomerByEmail(userEmail).zip);
        }
        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 (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)"));
        }
示例#17
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"));
                }
            }
        }
示例#18
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));
        }
        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 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));
            }
        }