public ActionResult LogIn(LogOnModel model, String returnUrl)
        {
            if (ModelState.IsValid)
            {
                var senha = Encryption.EncryptMd5(String.Format("{1}@{0}", model.Senha.Trim(), model.Login.Trim()));
                if (new UsuarioService().Validate(model.Login.Trim(), senha))
                {
                    // Get Information of the User is Logged
                    var usuario = new UsuarioService().GetRecords(usu => usu.Login == model.Login.Trim()).FirstOrDefault();
                    if (usuario != null && !usuario.IsAtivo)// Inativo
                    {
                        ModelState.AddModelError("", Constants._msgInactiveUser);
                    }
                    else if (usuario != null) // Ativo
                    {
                        // Serialize Model
                        var serializeModel = new CustomPrincipalSerializeModel
                        {
                            IdUsuario = usuario.IdUsuario,
                            NomeUsuario = usuario.NomeUsuario,
                            Login = usuario.Login,
                            Email = usuario.Email,
                            IdGrupo = usuario.IdGrupo
                        };

                        var userData = new JavaScriptSerializer().Serialize(serializeModel);

                        var prefixoCookie = ConfigurationManager.AppSettings["AdminCookieName"];
                        FormsAuthenticationUtil.SetCustomAuthCookie(prefixoCookie + model.Login, userData, false);
                        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                        {
                            return Redirect(returnUrl);
                        }
                        return RedirectToAction("Index", "Home");
                    }
                }
                ModelState.AddModelError("Login", Constants._msgUserOrPasswordInvalid);
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
        public ActionResult LogIn(LogInModel model, String returnUrl)
        {
            if (!ModelState.IsValid)
            {
                return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Validation, Message = @Resources.Resource.Msg_Geral_DadosInvalidos });
            }

            Model.Usuario usuario = null;
            Perfil perfil = new Perfil();
            // TODO: M.L. 2012/11/15 16:06 - Alterar a Senha de Todos novamente, quem é do EC deverá ser Encryption.EncryptMd5(senha@email)
            var senha = Encryption.EncryptMd5(String.Format("{1}@{0}", model.Password.Trim(), model.UserName.Trim()));
            var isValid = new UsuarioService().ValidateEcommerce(model.UserName.Trim(), senha);

            if (isValid)
            {
                usuario = new UsuarioService().GetRecords(usu => usu.Email == model.UserName.Trim() && usu.IsAtivo).FirstOrDefault();
            }

            if (usuario == null)
            {
                return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Alert, Message = @Resources.Resource.Msg_Geral_UsuarioSenhaInvalido });
            }

            var cliente = new ClienteService().GetCustomer(usuario.IdUsuario);
            if (cliente.IdPerfil != null)
            {
                // Armazena o Perfil do Cliente (logado) na Variável
                perfil = new Perfil
                {
                    IdPerfil = cliente.Ecommerce_Perfil.IdPerfil,
                    Nome = cliente.Ecommerce_Perfil.Nome,
                    PercentualDesconto = cliente.Ecommerce_Perfil.PercentualDesconto
                };
            }

            Guid cookieCarrinho = Guid.NewGuid();
            var idCliente = 0;
            if (cliente != null)
            {
                idCliente = cliente.IdCliente;

                var cookie = Request.Cookies[_cookieCartKey];
                //check if there is a cart
                if (cookie != null)
                {
                    cookieCarrinho = new Guid(cookie.Value);
                    var carrinhoAnonimo = new CarrinhoService().GetCart(cookieCarrinho);

                    //verificar se existem items para o carrinho anonimo
                    if (carrinhoAnonimo != null)
                    {
                        if (carrinhoAnonimo.Ecommerce_CarrinhoItem.Count > 0)
                        {
                            //remove qualquer carrinho antigo do cliente
                            var carrinhosCliente = new CarrinhoService().GetRecords(car => car.IdCliente == idCliente);
                            if (carrinhosCliente.Count > 0)
                            {
                                foreach (var item in carrinhosCliente.ToList())
                                {
                                    new CarrinhoService().DeleteCart(item.GuidCookie);
                                }
                            }
                            new CarrinhoService().AttachCartToClient(cookieCarrinho, idCliente);
                        }
                        else
                        {
                            var carrinhoCliente = new CarrinhoService().GetRecords(car => car.IdCliente == idCliente).FirstOrDefault();
                            if (carrinhoCliente != null)
                            {
                                cookieCarrinho = carrinhoCliente.GuidCookie;
                            }
                            else
                            {
                                new CarrinhoService().AttachCartToClient(cookieCarrinho, idCliente);
                            }
                        }
                    }
                    else
                    {
                        //verificar se existe alguma carrinho para o cliente
                        var carrinho = new CarrinhoService().GetRecords(car => car.IdCliente == idCliente).FirstOrDefault();

                        if (carrinho != null)
                        {
                            cookieCarrinho = carrinho.GuidCookie;
                        }
                        else
                        {
                            new CarrinhoService().CreateCart(cookieCarrinho, idCliente);
                        }
                    }
                    cookie.Expires = DateTime.Now.AddDays(-1); // TODO: M.L. 2012/11/15 16:53 - Definir nos Setting o Tempo para expiração do Cookie do Carrinho
                    System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
                }
                else
                {
                    //if cookie was null
                    new CarrinhoService().CreateCart(cookieCarrinho, idCliente);
                }
            }

            var serializeModel = new CustomPrincipalSerializeModel
                                     {
                                         IdUsuario = usuario.IdUsuario,
                                         NomeUsuario = usuario.NomeUsuario,
                                         Login = usuario.Login,
                                         Email = usuario.Email,
                                         IdGrupo = usuario.IdGrupo,
                                         IdCliente = idCliente,
                                         CookieCarrinho = cookieCarrinho
                                     };

            //Armazenar o Perfil do Cliente (logado) caso exista
            serializeModel.Perfil = perfil;

            var prefixoCookie = ConfigurationManager.AppSettings["EcommerceCookieName"];
            FormsAuthenticationUtil.SetCustomAuthCookie(prefixoCookie + model.UserName, new JavaScriptSerializer().Serialize(serializeModel), model.RememberMe);

            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Success, ReturnUrl = returnUrl }, JsonRequestBehavior.AllowGet);
            }

            return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Success, ReturnUrl = Url.Content(@"~/Dashboard/") }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult InsertNewCustomer(NovoClienteModel model)
        {
            if (ModelState.IsValid)
            {
                if (!new ClienteService().EmailIsValid(model.EmailAdress))
                {
                    return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Validation, Message = Resources.Resource.NovoCliente_EmailDuplicado }, JsonRequestBehavior.AllowGet);
                }

                if (new ClienteService().InsertCustomer(model))
                {
                    if (model.IdKit.HasValue)
                    {
                        //var senha = Encryption.EncryptMd5(string.Format("{1}@{0}", model.Password.Trim(), model.EmailAdress.Trim()));

                        Usuario usuario = new UsuarioService().GetRecords(usu => usu.Login == model.EmailAdress.Trim() && usu.IsAtivo).FirstOrDefault();

                        if (usuario == null)
                        {
                            return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Alert, Message = Resources.Resource.Msg_Geral_UsuarioSenhaInvalido });
                        }

                        var cliente = new ClienteService().GetRecords(cli => cli.IdUsuario == usuario.IdUsuario).FirstOrDefault();
                        Guid cookieCarrinho = Guid.NewGuid();
                        var idCliente = 0;
                        if (cliente != null)
                        {
                            idCliente = cliente.IdCliente;

                            var cookie = Request.Cookies[_cookieCartKey];
                            //check if there is a cart
                            if (cookie != null)
                            {
                                cookieCarrinho = new Guid(cookie.Value);
                                var carrinhoAnonimo = new CarrinhoService().GetCart(cookieCarrinho);

                                //verificar se existem items para o carrinho anonimo
                                if (carrinhoAnonimo != null)
                                {
                                    if (carrinhoAnonimo.Ecommerce_CarrinhoItem.Count > 0)
                                    {
                                        //remove qualquer carrinho antigo do cliente
                                        var carrinhosCliente = new CarrinhoService().GetRecords(car => car.IdCliente == idCliente);
                                        if (carrinhosCliente.Count > 0)
                                        {
                                            foreach (var item in carrinhosCliente.ToList())
                                            {
                                                new CarrinhoService().DeleteCart(item.GuidCookie);
                                            }
                                        }
                                        new CarrinhoService().AttachCartToClient(cookieCarrinho, idCliente);
                                    }
                                    else
                                    {
                                        var carrinhoCliente = new CarrinhoService().GetRecords(car => car.IdCliente == idCliente).FirstOrDefault();
                                        if (carrinhoCliente != null)
                                        {
                                            cookieCarrinho = carrinhoCliente.GuidCookie;
                                        }
                                        else
                                        {
                                            new CarrinhoService().AttachCartToClient(cookieCarrinho, idCliente);
                                        }
                                    }
                                }
                                else
                                {
                                    //verificar se existe alguma carrinho para o cliente
                                    var carrinho = new CarrinhoService().GetRecords(car => car.IdCliente == idCliente).FirstOrDefault();

                                    if (carrinho != null)
                                    {
                                        cookieCarrinho = carrinho.GuidCookie;
                                    }
                                    else
                                    {
                                        new CarrinhoService().CreateCart(cookieCarrinho, idCliente);
                                    }
                                }
                                cookie.Expires = DateTime.Now.AddDays(-1);
                                System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
                            }
                            else
                            {
                                //if cookie was null
                                new CarrinhoService().CreateCart(cookieCarrinho, idCliente);
                            }
                        }

                        var serializeModel = new CustomPrincipalSerializeModel
                        {
                            IdUsuario = usuario.IdUsuario,
                            NomeUsuario = usuario.NomeUsuario,
                            Login = usuario.Login,
                            Email = usuario.Email,
                            //IdGrupo = usuario.IdGrupo,
                            IdCliente = idCliente,
                            CookieCarrinho = cookieCarrinho
                        };

                        var prefixoCookie = ConfigurationManager.AppSettings["EcommerceCookieName"];
                        FormsAuthenticationUtil.SetCustomAuthCookie(prefixoCookie + model.EmailAdress, new JavaScriptSerializer().Serialize(serializeModel), false);

                        return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Success, ReturnUrl = Url.Content(@"~/Cart/Details") }, JsonRequestBehavior.AllowGet);
                    }

                    return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Success, Message = Resources.Resource.Msg_Geral_CadastroRealizado, ReturnUrl = Url.Content(@"~/Dashboard") }, JsonRequestBehavior.AllowGet);
                }

                return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Error, Message = Resources.Resource.Msg_Geral_Erro }, JsonRequestBehavior.AllowGet);
            }

            return Json(new JsonRequestResult { ResultType = JsonRequestResultType.Validation, Message = Resources.Resource.Msg_Geral_DadosIncorretos }, JsonRequestBehavior.AllowGet);
        }