public async Task <IActionResult> Login(Login model, string returnUrl)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    throw new UserException("Por favor, informe o usuário e senha!");
                }

                Microsoft.AspNetCore.Identity.SignInResult resultSign = await signInManager.PasswordSignInAsync(model.Email, model.Senha, model.Lembrar, lockoutOnFailure : false);

                if (!resultSign.Succeeded)
                {
                    throw new UserException("E-mail e/ou senha não encontrado(s)!");
                }

                if (string.IsNullOrEmpty(returnUrl) || returnUrl.Equals("/"))
                {
                    int userId = (await userManager.GetUserAsync(User)).Id;

                    List <BranchNetwork> branchNetworks = BranchNetwork.FindByUserId(userId, connection, null);

                    if (branchNetworks.Count == 0)
                    {
                        return(LocalRedirect("~/Management/BranchNetwork/Create?returnUrl=~/Management/BranchNetwork"));
                    }
                    else
                    {
                        return(Redirect(Url.Link("management", new { area = "Management", controller = "BranchNetwork", action = "Index" })));
                    }
                }
                else
                {
                    return(LocalRedirect(returnUrl));
                }
            }
            catch (UserException erro)
            {
                ViewBag.Mensagem = erro.Message;
            }
            catch (Exception erro)
            {
                ILogger <ConsoleLogger> logger = loggerFactory.CreateLogger <ConsoleLogger>();
                logger.LogError("Exception: " + erro.Message);
                ViewBag.Mensagem = "Ocorreu um erro inesperado ao verificar o e-mail e senha!";
            }

            return(View());
        }
        public async Task <IActionResult> Create(Create model)
        {
            MySqlTransaction transaction = null;

            try
            {
                int userId = (await UserManager.GetUserAsync(User)).Id;

                transaction = Connection.BeginTransaction();

                var branchNetwork = new BranchNetwork
                {
                    Name = model.Name
                };

                branchNetwork.Save(Connection, transaction);

                var branchNetworkUser = new BranchNetworkUser
                {
                    BranchNetworkId = branchNetwork.Id,
                    UserId          = userId
                };

                branchNetworkUser.Save(Connection, transaction);

                transaction.Commit();

                if (string.IsNullOrEmpty(model.ReturnUrl))
                {
                    return(LocalRedirect("~/Management/BranchNetwork"));
                }
                else
                {
                    return(LocalRedirect(model.ReturnUrl));
                }
            }
            catch (BranchNetworkException exception)
            {
                transaction?.Rollback();
                ViewBag.Message = exception.Message;
            }
            catch (Exception)
            {
                transaction?.Rollback();
                ViewBag.Message = "Ocorreu um erro ao tentar cadastrar a rede";
            }

            return(View(model));
        }
        public IActionResult Details(int branchNetworkId)
        {
            var details = new BranchNetworkDetails();

            try
            {
                BranchNetwork branchNetwork = BranchNetwork.FindById(branchNetworkId, Connection, null);

                details.Id       = branchNetwork.Id;
                details.Name     = branchNetwork.Name;
                details.Users    = Models.User.FindByBranchNetworkId(branchNetworkId, Connection, null);
                details.Branches = Branch.FindAllByBranchNetwork(branchNetworkId, Connection, null);
            }
            catch (Exception)
            {
            }

            return(View(details));
        }
        public async Task <IActionResult> Index()
        {
            try
            {
                int userId = (await UserManager.GetUserAsync(User)).Id;
                List <BranchNetwork> branchNetworks = BranchNetwork.FindByUserId(userId, Connection, null);

                if (branchNetworks.Count == 0)
                {
                    throw new BranchNetworkException("Não existe nenhuma rede vinculada ao seu usuário!");
                }

                var branchNetworkLines = new List <BranchNetworkLine>();

                foreach (BranchNetwork branchNetwork in branchNetworks)
                {
                    branchNetworkLines.Add(
                        new BranchNetworkLine
                    {
                        Id             = branchNetwork.Id,
                        Name           = branchNetwork.Name,
                        NumberBranches = Branch.FindAllByBranchNetwork(branchNetwork.Id, Connection, null).Count()
                    }
                        );
                }

                return(View(branchNetworkLines));
            }
            catch (BranchNetworkException exception)
            {
                ViewBag.Message = exception.Message;
            }
            catch (Exception)
            {
                ViewBag.Message = "Ocorreu um erro ao listas as redes. Por favor, tente novamente em alguns instantes!";
            }

            return(View());
        }