public ActionResult Index()
        {
            // Get Parametros
            var tipoParametro = ((Int32)TipoParametro.ConfiguracaoDaHome);

            var parameters = new ParametroService().GetRecords(p => p.IdTipoParametro == tipoParametro);
            if (parameters != null && parameters.Count > 0)
            {
                ViewBag.Address = parameters.FirstOrDefault(p => p.Nome == "Endereco");
                ViewBag.Phone = parameters.FirstOrDefault(p => p.Nome == "Telefone");
            }
            tipoParametro = ((Int32)TipoParametro.PesquisaDoCliente);
            parameters = new ParametroService().GetRecords(p => p.IdTipoParametro == tipoParametro);
            if (parameters != null && parameters.Count > 0)
            {
                ViewBag.PesquisaDoCliente = GetSearchItemsSelectList(parameters, Resource.Label_EC_Selecione);
            }

            return View(new ContatoModel());
        }
        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);
        }
        /// <summary>
        /// Form to submit values to gateway
        /// </summary>
        /// <param name="id">idPedido</param>
        /// <returns></returns>
        public ActionResult Payment(int id)
        {
            if (User.Identity.IsAuthenticated)
            {
                ViewBag.Title = Resources.Resource.Pagamento_Titulo;

                //get order details
                var idPedido = new PedidoService().GetRecords(x => x.NumeroPedido == id).FirstOrDefault().IdPedido;
                var pedido = new PedidoService().GetById(idPedido, GetCurrentIdIdioma());

                if (pedido.Status == StatusPedido.AguardandoPagamento &&
                    FormsAuthenticationUtil.UserAuthenticated.IdCliente.HasValue &&
                    FormsAuthenticationUtil.UserAuthenticated.IdCliente.Value == pedido.IdCliente)
                {
                    //get shipping address details
                    var endereco = new EnderecoService().GetShippingAddress(pedido.IdPedido);

                    var cultureInfo = new CultureInfo("en-US");

                    var rgService = new RequestGatewayService();
                    rgService.Model = new RequestGatewayModel
                    {
                        PedidoNumero = pedido.Numero.HasValue ? pedido.Numero.Value.ToString(CultureInfo.InvariantCulture) : string.Empty,
                        PedidoValorFrete = pedido.ValorFrete.ToString(cultureInfo),
                        PedidoValorTaxas = pedido.ValorTaxa.ToString(cultureInfo),
                        PedidoValorManuseio = pedido.ValorManuseio.ToString(cultureInfo),
                        PedidoSubTotal = pedido.Subtotal.ToString(cultureInfo),
                        PedidoTotal = pedido.Total.ToString(cultureInfo),

                        ClienteId = pedido.IdCliente.ToString(CultureInfo.InvariantCulture),
                        ClienteSobrenome = pedido.NomeCliente.Trim().Split(' ').Length > 1 ? pedido.NomeCliente.Trim().Split(' ')[0] : pedido.NomeCliente.Trim(),
                        ClienteNome = pedido.NomeCliente.Trim().Split(' ').Length > 1 ? pedido.NomeCliente.Trim().Substring(pedido.NomeCliente.IndexOf(' '), pedido.NomeCliente.Trim().Length - pedido.NomeCliente.Trim().IndexOf(' ')) : string.Empty,

                        EnderecoCep = endereco.Cep,
                        EnderecoLogradouro = endereco.Logradouro,
                        EnderecoCidade = endereco.IdCidade != null ? endereco.Cidade1.Nome : endereco.Cidade,
                        EnderecoEstado = endereco.IdEstado != null ? endereco.Estado.Nome : string.Empty,
                        EnderecoEmail = endereco.EmailEntrega,
                        EnderecoTelefone = endereco.TelefoneEntrega
                    };

                    switch (pedido.FormaPagamento)
                    {
                        case FormaPagamento.Authorize:
                            var parameters = new ParametroService().GetByParameterType((int)TipoParametro.FormaDePagamento);
                            var apiLogin = parameters.Where(x => x.Nome == "Login ApI").FirstOrDefault();
                            var transKey = parameters.Where(x => x.Nome == "Transaction Key").FirstOrDefault();
                            var urlResponse = parameters.Where(x => x.Nome == "Url de retorno Authorize").FirstOrDefault();

                            if (apiLogin != null && transKey != null && urlResponse != null)
                            {
                                rgService.QueryString = Settings.AuthorizeQueryString;
                                rgService.Model.GatewayUsuario = apiLogin.Valor;
                                rgService.Model.GatewayUrlRequest = Settings.AuthorizeRequest;
                                rgService.Model.GatewayUrlResponse = urlResponse.Valor;

                                rgService.AdicionalParameters = new Dictionary<String, String>();
                                var timeStamp = ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds).ToString();
                                string fingerprint = WebHelpers.HMAC_MD5(transKey.Valor, rgService.Model.GatewayUsuario + "^" + rgService.Model.PedidoNumero + "^" + timeStamp + "^" + rgService.Model.PedidoTotal + "^");

                                rgService.AdicionalParameters.Add("timeStamp", timeStamp);
                                rgService.AdicionalParameters.Add("fingerprint", fingerprint);
                            }

                            return View(rgService);
                        case FormaPagamento.Paypal:
                            var parametros = new ParametroService().GetByParameterType((int)TipoParametro.FormaDePagamento);
                            var business = parametros.Where(x => x.Nome == "Business").FirstOrDefault().Valor;
                            var urlRetorno = parametros.Where(x => x.Nome == "Url de retorno Paypal").FirstOrDefault().Valor;
                            var urlNotificacao = parametros.Where(x => x.Nome == "Url de notificação").FirstOrDefault().Valor;
                            var urlImagem = parametros.Where(x => x.Nome == "Url da Imagem").FirstOrDefault().Valor;

                            rgService.QueryString = Settings.PaypalQueryString;
                            rgService.Model.GatewayUsuario = business;
                            rgService.Model.GatewayUrlRequest = Settings.PaypalRequest;
                            rgService.Model.GatewayUrlResponse = urlRetorno;

                            rgService.AdicionalParameters = new Dictionary<string, string>();
                            rgService.AdicionalParameters.Add("lc", "PT");// CultureInfo.CurrentUICulture.TextInfo.CultureName.Split('-')[1]
                            rgService.AdicionalParameters.Add("image_url", urlImagem);
                            rgService.AdicionalParameters.Add("notify_url", urlNotificacao);

                            return View(rgService);
                        case FormaPagamento.BoletoBradesco:
                            var paramBoleto = new ParametroService().GetByParameterType((int)TipoParametro.FormaDePagamento);
                            var urlBoleto = paramBoleto.FirstOrDefault(m => m.Nome == "Boleto Bradesco URL") ?? new Parametro();
                            var numLoja = paramBoleto.FirstOrDefault(m => m.Nome == "Boleto Bradesco Numero Loja") ?? new Parametro();

                            rgService.Model.PedidoNumero = idPedido.ToString(CultureInfo.InvariantCulture);
                            rgService.Model.GatewayUrlRequest = string.Format(urlBoleto.Valor, numLoja.Valor, id);
                            rgService.QueryString = string.Format(Settings.BoletoBradescoQueryString, numLoja.Valor, id);

                            return View("PaymentBoleto", rgService);
                        default:
                            return AccessDenied();
                    }
                }
            }
            return AccessDenied();
        }
        public ActionResult ConfirmationBoletoBradesco()
        {
            //PARAMETERS "transId","numOrder","merchantid","cod","cctype","ccna me","ccemail","numparc","valparc","valtotal","prazo","tipopagto","assinatura",
            var numOrder = Request.Form["numOrder"];
            var numeroPedido = int.Parse(numOrder);

            var parameters = new ParametroService().GetByParameterType((int)TipoParametro.FormaDePagamento);
            var banco = parameters.FirstOrDefault(m => m.Nome == "Boleto Bradesco Banco");
            var agencia = parameters.FirstOrDefault(m => m.Nome == "Boleto Bradesco Numero Agencia");
            var conta = parameters.FirstOrDefault(m => m.Nome == "Boleto Bradesco Numero Conta");
            var assinatura = parameters.FirstOrDefault(m => m.Nome == "Boleto Bradesco Assinatura");
            var diasPagamento = parameters.FirstOrDefault(m => m.Nome == "Boleto Bradesco Dias Vencimento");
            int diasPgto = int.Parse(diasPagamento.Valor);


            var sb = new StringBuilder();
            var pedido = new PedidoService().GetByNumero(numeroPedido);

            if (pedido != null)
            {
                sb.Append("<BEGIN_ORDER_DESCRIPTION>");
                sb.Append(string.Format("<orderid>=({0})", numOrder));
                foreach (var item in pedido.Ecommerce_PedidoItem.ToList())
                {
                    var produto = new ProdutoService().GetById(item.IdProduto);

                    sb.Append(string.Format("<descritivo>=({0})", produto.Nome));
                    sb.Append(string.Format("<quantidade>=({0})", item.QuantidadeProduto));
                    sb.Append(string.Format("<unidade>=({0})", "UN"));
                    sb.Append(string.Format("<valor>=({0})", Math.Round((item.ValorProduto * item.QuantidadeProduto) * 100), 0));
                }
                sb.Append("<adicional>=(frete)");
                sb.Append(string.Format("<valorAdicional>=({0})", Math.Round(pedido.ValorFrete.GetValueOrDefault() * 100),0));

                if(pedido.ValorTaxaManuseio.GetValueOrDefault() > 0)
                {
                    sb.Append("<adicional>=(manuseio)");
                    sb.Append(string.Format("<valorAdicional>=({0})",Math.Round(pedido.ValorTaxaManuseio.GetValueOrDefault() * 100),0));    
                }
                
                sb.Append("<END_ORDER_DESCRIPTION>");
                sb.Append("<BEGIN_BOLETO_DESCRIPTION>");
                sb.Append(string.Format("<CEDENTE>=({0})",Resources.Resource.BoletoBradesco_Cedente));
                if (banco != null) sb.Append(string.Format("<BANCO>=({0})", banco.Valor));
                if (agencia != null) sb.Append(string.Format("<NUMEROAGENCIA>=({0})", agencia.Valor));
                if (conta != null) sb.Append(string.Format("<NUMEROCONTA>=({0})", conta.Valor));
                if (assinatura != null) sb.Append(string.Format("<ASSINATURA>=({0})", assinatura.Valor));
                sb.Append(string.Format("<DATAEMISSAO>=({0})", DateTime.Today.ToString("dd/MM/yyyy")));
                sb.Append(string.Format("<DATAPROCESSAMENTO>=({0})", DateTime.Today.ToString("dd/MM/yyyy")));
                sb.Append(string.Format("<DATAVENCIMENTO>=({0})", DateTime.Today.AddDays(diasPgto).ToString("dd/MM/yyyy")));
                sb.Append(string.Format("<NOMESACADO>=({0})",pedido.Ecommerce_Cliente.NomeCompleto));
                sb.Append(string.Format("<ENDERECOSACADO>=({0}, {1})", pedido.Ecommerce_PedidoEndereco.Logradouro, pedido.Ecommerce_PedidoEndereco.Numero));
                sb.Append(string.Format("<CIDADESACADO>=({0})",pedido.Ecommerce_PedidoEndereco.Cidade));
                sb.Append(string.Format("<UFSACADO>=({0})",pedido.Ecommerce_PedidoEndereco.Estado.Prefixo));
                sb.Append(string.Format("<CEPSACADO>=({0})",pedido.Ecommerce_PedidoEndereco.Cep.PadRight(8,'0')));
                sb.Append(string.Format("<CPFSACADO>=({0})",(pedido.Ecommerce_Cliente.Documento ?? "").PadRight(11,'0')));
                sb.Append(string.Format("<NUMEROPEDIDO>=({0})",numOrder));
                sb.Append(string.Format(CultureInfo.CreateSpecificCulture("pt-BR"),"<VALORDOCUMENTOFORMATADO>=({0:C})", pedido.ValorTotal.GetValueOrDefault()).Replace(" ",""));
                sb.Append("<SHOPPINGID>=(1)");
                sb.Append(string.Format("<NUMDOC>=({0})",numOrder));
                sb.Append("<END_BOLETO_DESCRIPTION>");
            }

            ViewBag.XML = sb.ToString();

            return View();
        }