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!")); }
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")); } }
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); } }
public string SearchCep(string email) { CRMRestClient crmClient = new CRMRestClient(); Customer customer = crmClient.GetCustomerByEmail(email); if (customer != null) { return(customer.zip); } else { return(null); } }
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")); } }
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.")); } }
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)); }
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)")); }
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 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)); } }