public JsonResult Editar(Ecommerce_Pedido model, bool notificarCliente)
        {
            new PedidoService().UpdateObject(model);

            var dadosEmail = new PedidoService().DadosEmail(model);

            if (notificarCliente && model.StatusPedido == 3)
            {
                Email.SendNotifyCustomerOrder(dadosEmail);
            }
            else if (model.StatusPedido == 2)
            {
                var wsReturn = new WS.Commissions.Commissions().GenerateCommissions(Settings.AutenticationKeyEarningSystem,
                                                                                model.IdPedido, 0);
            }
            else if (model.StatusPedido == 4)
            {
                var wsReturn =
                    new WS.Commissions.Commissions().GenerateReverseCommissions(Settings.AutenticationKeyEarningSystem,
                                                                                model.IdPedido);
            }

            return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Success, Message = Constants._msgUpdateSuccess, ReturnUrl = Url.Content("~/Admin/Pedido/") });
        }
        /// <summary>
        /// Confirma o pedido do Paypal e salva os detalhes
        /// </summary>
        /// <param name="transactionId"></param>
        /// <returns></returns>
        protected PedidoModel ConfirmPaypalOrder(string transactionId)
        {
            var parameters = new ParametroService().GetByParameterType((int)TipoParametro.FormaDePagamento);
            var token = parameters.Where(x => x.Nome == "Token").FirstOrDefault().Valor;

            //Build a url to call Paypal and get data about the Transaction
            //ex. url?cmd=_notify-synch&tx=[TransactionID]&at=[PDTIdentityToken]
            var query = string.Format("cmd=_notify-synch&tx={0}&at={1}", transactionId, token);
            var urlRequest = Settings.PaypalRequest;
            var requestUrl = string.Format("{0}?{1}", urlRequest, query);

            var req = (HttpWebRequest)WebRequest.Create(requestUrl);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            req.ContentLength = query.Length;

            var stOut = new StreamWriter(req.GetRequestStream(), Encoding.ASCII);
            stOut.Write(query);
            stOut.Close();

            // Do the request to PayPal and get the response
            var stIn = new StreamReader(req.GetResponse().GetResponseStream());
            var strResponse = stIn.ReadToEnd();
            stIn.Close();

            // If response was SUCCESS, parse response string and output details
            if (strResponse.StartsWith("SUCCESS"))
            {
                //Verify order
                var idPedido = UpdatePaypalTransaction(strResponse);

                try
                {
                    //Generate Comission
                    bool resultComission = new WS.Commissions.Commissions().GenerateCommissions(Settings.AutenticationKeyEarningSystem, idPedido, GetIdClientCookie(this));
                }
                catch (Exception ex)
                {
                    LogService.Log("WS.Commissions.Commissions().GenerateCommissions()", ex.Message, TipoLog.Erro);
                }

                if (idPedido != 0)
                {
                    var pedido = new PedidoService().GetById(idPedido, GetCurrentIdIdioma());
                    return pedido;
                }
                throw new Exception(Resources.Resource.Msg_Order_PedidoNaoEncontrado);
            }
            throw new Exception(Resources.Resource.Msg_Order_MensagemNaoValidadaPaypal);
        }
        /// <summary>
        /// Confirmation page
        /// </summary>
        /// <returns></returns>
        public ActionResult Confirmation(int id)
        {
            if (User.Identity.IsAuthenticated)
            {
                ViewBag.Title = Resources.Resource.Pedido_Confirmacao;
                var pedidoModel = new PedidoService().GetById(id, GetCurrentIdIdioma());

                //
                try
                {
                    if (pedidoModel.IdStatus == 2)
                    {
                        //Generate Comission
                        bool resultComission = new WS.Commissions.Commissions().GenerateCommissions(Settings.AutenticationKeyEarningSystem, id, GetIdClientCookie(this));
                        RemoveIdClientCookie(this);
                    }
                }
                catch (Exception ex)
                {
                    LogService.Log("WS.Commissions.Commissions().GenerateCommissions()", ex.Message, TipoLog.Erro);
                }
                //

                return View("Confirmation", pedidoModel);
            }
            else
            {
                return RedirectToAction("Index", "Account");
            }
        }
        /// <summary>
        /// Recebera a confirmação do Paypal quando o mesmo não conseguir responder diretamente ao formulário no momento do pagamento.
        /// </summary>
        public void ConfirmationPaypalAnswer()
        {
            try
            {
                var urlRequest = Settings.PaypalRequest;

                var req = (HttpWebRequest)WebRequest.Create(urlRequest);
                //Set values for the request back
                req.Method = "POST";
                req.ContentType = "application/x-www-form-urlencoded";

                byte[] param = Request.BinaryRead(Request.ContentLength);
                string strRequest = Encoding.ASCII.GetString(param);
                strRequest += "&cmd=_notify-validate";
                req.ContentLength = strRequest.Length;

                //Send the request to PayPal and get the response
                var streamOut = new StreamWriter(req.GetRequestStream(),
                                         System.Text.Encoding.ASCII);
                streamOut.Write(strRequest);
                streamOut.Close();

                var streamIn = new StreamReader(req.GetResponse().GetResponseStream());
                string strResponse = streamIn.ReadToEnd();
                streamIn.Close();

                if (strResponse == "VERIFIED")
                {
                    //Update Paypal
                    var idPedido = UpdatePaypalTransaction(strRequest);
                    try
                    {
                        //Generate Comission
                        bool resultComission = new WS.Commissions.Commissions().GenerateCommissions(Settings.AutenticationKeyEarningSystem, idPedido, GetIdClientCookie(this));
                    }
                    catch (Exception ex)
                    {
                        LogService.Log("WS.Commissions.Commissions().GenerateCommissions()", ex.Message, TipoLog.Erro);
                    }
                }
                else if (strResponse == "INVALID")
                {
                    var e = new Exception(Constants._Paypal_InvalidConfirmation);
                    e.Data.Add("request", strResponse);
                    throw e;
                }
                else
                {
                    var e = new Exception(Constants._Paypal_SuspiciousRequest);
                    e.Data.Add("request", strResponse);
                    throw e;
                }
            }
            catch (Exception ex)
            {
                LogService.Log("Order.ConfirmationPaypalAnswer()", ex.Message, TipoLog.Seguranca);
            }
        }
        private void SetCommissions(PeriodModel period, PromoterModel promoter)
        {
            //Retorna as comissões
            if (period == null) return;

            var commissions = new WS.Commissions.Commissions().SelectFiltered(
                Settings.AutenticationKeyEarningSystem, period.DataInicio, period.DataTermino, promoter.IdPromoter);

            ViewBag.CommisionsTeam = commissions.Where(m => m.Nivel != 0).Sum(m => m.ValorComissao);
            ViewBag.CommisionsOther = commissions.Where(m => m.Nivel == 0).Sum(m => m.ValorComissao);
            ViewBag.CommisionsTotal = commissions.Sum(m => m.ValorComissao);
        }