private Decimal GetShippingPriceCorreios(String zipcode, Decimal peso, String codServico, Decimal comprimento, Decimal altura, Decimal largura, Decimal diametro, ref CarrinhoModel carrinho)
        {
            if (String.IsNullOrWhiteSpace(zipcode))
            {
                return new Decimal(0);
            }

            //recupera os valores dos parametros para Correios
            var parameters = new ParametroService().GetByParameterType((int)TipoParametro.TipoDeEntrega);
            var cdCorreios = parameters.FirstOrDefault(x => "Código Correios" == x.Nome);
            var senhaCorreios = parameters.FirstOrDefault(x => "Senha Correios" == x.Nome);
            var maoPropria = parameters.FirstOrDefault(x => "Entrega mão propria Correios[S/N]" == x.Nome);
            var valorDeclarado = parameters.FirstOrDefault(x => "Entrega com valor declarado Correios[S/N]" == x.Nome);
            var avisoRecebimento = parameters.FirstOrDefault(x => "Entrega com aviso de recebimento Correios[S/N]" == x.Nome);
            var cepOrigem = parameters.FirstOrDefault(x => "Cep Origem Correios" == x.Nome);


            if (largura < 11)
            {
                largura = 11;
            }

            if (comprimento < 16)
            {
                comprimento = 16;
            }

            if (altura < 2)
            {
                altura = 2;
            }

            var correio = new CalcPrecoPrazoWS();
            var retorno = correio.CalcPrecoPrazo(cdCorreios.Valor, senhaCorreios.Valor, codServico, cepOrigem.Valor, zipcode, peso.ToString(CultureInfo.InvariantCulture), 1, comprimento, altura, largura, diametro, maoPropria.Valor, 0, avisoRecebimento.Valor);

            if (retorno.Servicos.Any())
            {
                var valor = retorno.Servicos[0].Valor.Replace(",", "");
                int prazo;

                int.TryParse(retorno.Servicos[0].PrazoEntrega, out prazo);

                carrinho.PrazoEntrega = prazo;

                return decimal.Parse(valor) / 100;
            }
            return new Decimal(0);
        }
        public ActionResult ShippingMethod(CarrinhoModel carrinho)
        {
            Decimal peso = carrinho.Items.Sum(x => x.Quantidade * x.Produto.Peso) / 1000;
            carrinho.ValorFrete = GetShippingPriceUPS(carrinho.ZipCode, peso);
            //Atualiza o valor das taxas para o estado
            if (UserAuthenticated != null && UserAuthenticated.IdCliente.HasValue)
            {
                var endereco = new EnderecoService().GetShippingAddressesByClientId(UserAuthenticated.IdCliente.Value);
                if (endereco.IdEstado.HasValue)
                {
                    var tax = new TaxaService().GetByEstadoId(endereco.IdEstado.Value);
                    if (tax != null && tax.Taxa.HasValue && carrinho.ValorSubtotal > 0)
                        carrinho.ValorTaxas = Decimal.Round(((carrinho.ValorSubtotal / 100) * tax.Taxa.Value), 2);
                }
            }

            return PartialView(carrinho);
        }