public ActionResult FormLogin(FormLoginModel model)
        {
            try
            {
                string redirectToUrl = Url.Action("Index", "Dashboard");

                if (string.IsNullOrEmpty(model.Email))
                {
                    model.ReturnAttribute.AddError("Email", "Preencha o e-mail.");
                }
                else
                {
                    if (!Helpers.Validation.IsValidEmail(model.Email))
                    {
                        model.ReturnAttribute.AddError("Email", "Preencha um e-mail válido.");
                    }
                }

                if (string.IsNullOrEmpty(model.Password))
                {
                    model.ReturnAttribute.AddError("Senha", "Preencha a senha.");
                }

                if (ModelState.IsValid)
                {
                    string senha        = Tropical.Infrastructure.Util.Cryptography.EncryptIt(model.Password);
                    bool   AccessDenied = true;

                    StoreAPI       storeAPI      = new StoreAPI();
                    FormLoginModel userValidated = (storeAPI.GetByLogin(model.Email, senha)).Cast <FormLoginModel>();

                    if (userValidated != null)
                    {
                        Tropical.Infrastructure.Model.User user = new Tropical.Infrastructure.Model.User()
                        {
                            Id    = userValidated.Id.ToString(),
                            Nome  = userValidated.Name,
                            Email = userValidated.Email
                        };

                        UsuarioClientePerfilModel objUsuarioClientePerfilModel = new UsuarioClientePerfilModel();
                        objUsuarioClientePerfilModel.PerfilId         = 1;
                        objUsuarioClientePerfilModel.Cliente          = new ClienteModel();
                        objUsuarioClientePerfilModel.Cliente.Id       = userValidated.Id;
                        objUsuarioClientePerfilModel.Cliente.Logotipo = Url.Content("~/img/avatars/male.png");  // userValidated.Logo;
                        objUsuarioClientePerfilModel.Cliente.Nome     = userValidated.Name;

                        Tropical.Infrastructure.Util.SessionData.SessionWriter("PerfilSelecionadoLogado", objUsuarioClientePerfilModel);

                        Tropical.Infrastructure.Util.SessionData.SessionWriter("UsuarioLogado", user);
                        FormsAuthentication.SetAuthCookie(userValidated.Id.ToString(), model.RememberMe);
                        AccessDenied = false;
                    }

                    if (!AccessDenied)
                    {
                        model.ReturnAttribute.Status      = Helpers.Constantes.StatusRetorno.Sucesso;
                        model.ReturnAttribute.Mensagem    = "Acessando o Painel de Controle, aguarde...";
                        model.ReturnAttribute.RedirectUrl = redirectToUrl;
                    }
                    else
                    {
                        model.ReturnAttribute.Status   = Helpers.Constantes.StatusRetorno.Erro;
                        model.ReturnAttribute.Mensagem = "Dados de acesso inválidos, verifique e tente novamente.";
                    }
                }
            }
            catch (ERPException exception)
            {
                model.ReturnAttribute.Status   = Helpers.Constantes.StatusRetorno.Erro;
                model.ReturnAttribute.Mensagem = exception.Mensagem;
            }
            catch (Exception a)
            {
                model.ReturnAttribute.Status   = Helpers.Constantes.StatusRetorno.Erro;
                model.ReturnAttribute.Mensagem = Helpers.Constantes.MsgNaoFoiPossivelCompletarOperacao;
            }

            return(View(model));
        }
        public ActionResult FormSignIn(FormLoginModel model)
        {
            try
            {
                string redirectToUrl = Url.Action("Index", "Dashboard");

                if (string.IsNullOrEmpty(model.Name))
                {
                    model.ReturnAttribute.AddError("Name", "Preencha o Nome ou Razão Social.");
                }

                if (string.IsNullOrEmpty(model.Document))
                {
                    model.ReturnAttribute.AddError("Document", "Preencha o CPF ou CNPJ.");
                }

                if (string.IsNullOrEmpty(model.Address))
                {
                    model.ReturnAttribute.AddError("Address", "Preencha o Endereço.");
                }

                if (string.IsNullOrEmpty(model.AddressNumber))
                {
                    model.ReturnAttribute.AddError("AddressNumber", "Número.");
                }

                if (string.IsNullOrEmpty(model.City))
                {
                    model.ReturnAttribute.AddError("City", "Preencha a Cidade.");
                }

                if (string.IsNullOrEmpty(model.State))
                {
                    model.ReturnAttribute.AddError("State", "Preencha o Estado.");
                }

                if (string.IsNullOrEmpty(model.PhoneNumber))
                {
                    model.ReturnAttribute.AddError("PhoneNumber", "Preencha o Whatsapp.");
                }

                if (string.IsNullOrEmpty(model.Email))
                {
                    model.ReturnAttribute.AddError("Email", "Preencha o e-mail.");
                }
                else
                {
                    if (!Helpers.Validation.IsValidEmail(model.Email))
                    {
                        model.ReturnAttribute.AddError("Email", "Preencha um e-mail válido.");
                    }
                }

                if (string.IsNullOrEmpty(model.Password))
                {
                    model.ReturnAttribute.AddError("Password", "Preencha a senha.");
                }

                if (ModelState.IsValid && model.ReturnAttribute.Errors.Any() == false)
                {
                    model.Password = Tropical.Infrastructure.Util.Cryptography.EncryptIt(model.Password);
                    model.Code     = RandomString(6);

                    StoreAPI       storeAPI    = new StoreAPI();
                    FormLoginModel userCreated = (storeAPI.Create(model.Cast <Util.API.Model.StoreModel>())).Cast <FormLoginModel>();

                    if (userCreated != null)
                    {
                        Tropical.Infrastructure.Model.User user = new Tropical.Infrastructure.Model.User()
                        {
                            Id    = userCreated.Id.ToString(),
                            Nome  = userCreated.Name,
                            Email = userCreated.Email
                        };

                        UsuarioClientePerfilModel objUsuarioClientePerfilModel = new UsuarioClientePerfilModel();
                        objUsuarioClientePerfilModel.PerfilId         = 1;
                        objUsuarioClientePerfilModel.Cliente          = new ClienteModel();
                        objUsuarioClientePerfilModel.Cliente.Id       = userCreated.Id;
                        objUsuarioClientePerfilModel.Cliente.Logotipo = Url.Content("~/img/avatars/male.png"); // userValidated.Logo;
                        objUsuarioClientePerfilModel.Cliente.Nome     = userCreated.Name;

                        Tropical.Infrastructure.Util.SessionData.SessionWriter("PerfilSelecionadoLogado", objUsuarioClientePerfilModel);

                        Tropical.Infrastructure.Util.SessionData.SessionWriter("UsuarioLogado", user);
                        FormsAuthentication.SetAuthCookie(userCreated.Id.ToString(), model.RememberMe);

                        model.ReturnAttribute.Status      = Helpers.Constantes.StatusRetorno.Sucesso;
                        model.ReturnAttribute.Mensagem    = "Acessando o Painel de Controle, aguarde...";
                        model.ReturnAttribute.RedirectUrl = redirectToUrl;
                    }
                    else
                    {
                        model.ReturnAttribute.Status   = Helpers.Constantes.StatusRetorno.Erro;
                        model.ReturnAttribute.Mensagem = "Ocorreu um problema o tentar realizar o cadastro.";
                    }
                }
            }
            catch (ERPException exception)
            {
                model.ReturnAttribute.Status   = Helpers.Constantes.StatusRetorno.Erro;
                model.ReturnAttribute.Mensagem = exception.Mensagem;
            }
            catch (Exception a)
            {
                model.ReturnAttribute.Status   = Helpers.Constantes.StatusRetorno.Erro;
                model.ReturnAttribute.Mensagem = Helpers.Constantes.MsgNaoFoiPossivelCompletarOperacao;
            }

            return(View(model));
        }