public ActionResult Users(int?Id)
        {
            if (ErrorHelpers.IdIsInvalid(Id, TempData))
            {
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/getallusers/{Id}";

            var response       = HttpClientContext.httpClient.GetAsync(url).Result;
            var responseResult = response.Content.ReadAsStringAsync().Result;

            if (response.IsSuccessStatusCode)
            {
                var datas     = JsonConvert.DeserializeObject <List <UserViewModel> >(responseResult);
                var viewModel = new HouseholdUserViewModel
                {
                    UserViewModels = datas,
                    HouseholdId    = (int)Id,
                    IsCreator      = HouseholdHelpers.IsUserCreator((int)Id, Request, TempData)
                };

                return(View(viewModel));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("Index", "Household"));
            }
        }
        public ActionResult RecoverPassword(RecoverPasswordViewModel passwordViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View()); // Not sending the viewModel because passwords
            }
            var url         = $"{ProjectConstants.APIURL}/api/Account/SendResetPassword";
            var callbackUrl = Url.Action("ResetPassword", "Account", null, Request.Url.Scheme);

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Email", passwordViewModel.Email),
                new KeyValuePair <string, string>("Url", callbackUrl)
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", $"If that account exists, an email has been sent!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View());
            }
        }
Example #3
0
        public ActionResult Edit(int?Id)
        {
            // Bank Account Id
            if (Id is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/bankaccount/getbyid/{Id}";

            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                var responseResult = response.Content.ReadAsStringAsync().Result;

                var data = JsonConvert.DeserializeObject <EditBankAccountViewModel>(responseResult);

                return(View(data));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View());
            }
        }
        public ActionResult SwitchVoid(int?Id, int?householdId)
        {
            // Id is Transaction Id
            if (Id is null || householdId is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/transaction/switchvoid/{Id}";

            var response = HttpClientContext.httpClient.PostAsync(url, null).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData["Message"] = $"Transaction's void state has been changed successfully!";
                return(RedirectToAction("HouseholdTransactions", "Transaction", new { Id = householdId }));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("HouseholdTransactions", "Transaction", new { Id = householdId }));
            }
        }
Example #5
0
        public ActionResult Delete(int?Id, int?householdId)
        {
            // Id is Bank Account Id
            if (Id is null || householdId is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/bankaccount/delete/{Id}";

            var response = HttpClientContext.httpClient.DeleteAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData["Message"] = "Account Deleted!";
                return(RedirectToAction("HouseholdBankAccounts", "BankAccount", new { Id = householdId }));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("HouseholdBankAccounts", "BankAccount", new { Id = householdId }));
            }
        }
        public ActionResult ChangePassword(ChangePasswordViewModel changePasswordViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            var url = $"{ProjectConstants.APIURL}/api/Account/ChangePassword";

            var token = Request.Cookies["UserAuthCookie"].Value;

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("OldPassword", changePasswordViewModel.OldPassword),
                new KeyValuePair <string, string>("NewPassword", changePasswordViewModel.NewPassword),
                new KeyValuePair <string, string>("ConfirmPassword", changePasswordViewModel.ConfirmPassword),
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "Password Changed!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View());
            }
        }
        public ActionResult Index()
        {
            var url = $"{ProjectConstants.APIURL}/api/household/getall";

            var token      = Request.Cookies["UserAuthCookie"].Value;
            var authHeader = new AuthenticationHeaderValue("Bearer", token);

            HttpClientContext.httpClient.DefaultRequestHeaders.Authorization = authHeader;

            // Handling lack of connection??? try catch?
            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                var responseResult = response.Content.ReadAsStringAsync().Result;

                var datas = JsonConvert.DeserializeObject <List <HouseholdViewModel> >(responseResult);

                return(View(datas));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View());
            }
        }
Example #8
0
        public ActionResult UpdateBalance(int?Id, int?householdId)
        {
            // Id is Bank Account Id
            if (Id is null || householdId is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/bankaccount/updatebalance/{Id}";

            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                var     responseResult = response.Content.ReadAsStringAsync().Result;
                dynamic data           = JsonConvert.DeserializeObject <ExpandoObject>(responseResult);

                TempData["Message"] = $"Account '{data.Name}' balance has been updated!";
                return(RedirectToAction("HouseholdBankAccounts", "BankAccount", new { Id = householdId }));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("HouseholdBankAccounts", "BankAccount", new { Id = householdId }));
            }
        }
Example #9
0
        [ValidateAntiForgeryToken] // Place these on the other actions
        public ActionResult Create(CreateCategoryViewModel categoryViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(categoryViewModel));
            }

            var url = $"{ProjectConstants.APIURL}/api/category/create/{categoryViewModel.HouseholdId}";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Name", categoryViewModel.Name),
                new KeyValuePair <string, string>("Description", categoryViewModel.Description)
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "Category Created!");
                return(RedirectToAction("HouseholdCategories", "Category", new { Id = categoryViewModel.HouseholdId }));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View(categoryViewModel));
            }
        }
        public ActionResult Edit(EditTransactionViewModel transactionViewModel)
        {
            if (!ModelState.IsValid)
            {
                TransactionHelpers.SetCategoryDropDownList(transactionViewModel, Request);

                if (transactionViewModel.Categories is null)
                {
                    TempData.Add("Message", "Error: Categories missing");
                    TempData.Add("MessageColour", "danger");
                    return(RedirectToAction("Index", "Household"));
                }

                return(View(transactionViewModel));
            }

            var url = $"{ProjectConstants.APIURL}/api/transaction/edit/{transactionViewModel.Id}";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Title", transactionViewModel.Title),
                new KeyValuePair <string, string>("Description", transactionViewModel.Description),
                new KeyValuePair <string, string>("Amount", transactionViewModel.Amount.ToString()),
                new KeyValuePair <string, string>("Date", transactionViewModel.Date.ToString()),
                new KeyValuePair <string, string>("CategoryId", transactionViewModel.CategoryId.ToString()),
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", $"Transaction '{transactionViewModel.Title}' Edited!");
                return(RedirectToAction("HouseholdTransactions", "Transaction", new { Id = transactionViewModel.HouseholdId }));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);

                TransactionHelpers.SetCategoryDropDownList(transactionViewModel, Request);

                if (transactionViewModel.Categories is null)
                {
                    TempData.Add("Message", "Error: Categories missing");
                    TempData.Add("MessageColour", "danger");
                    return(RedirectToAction("Index", "Household"));
                }

                return(View(transactionViewModel));
            }
        }
        public ActionResult Create(CreateTransactionViewModel transactionViewModel)
        {
            if (!ModelState.IsValid || transactionViewModel.BankAccountId is null || transactionViewModel.CategoryId is null)
            {
                TransactionHelpers.SetDropDownLists(transactionViewModel, Request);

                if (TransactionHelpers.BankAccntOrCategoriesIsNull(transactionViewModel, TempData))
                {
                    return(RedirectToAction("Index", "Household"));
                }

                return(View(transactionViewModel));
            }


            var url = $"{ProjectConstants.APIURL}/api/transaction/create/{transactionViewModel.BankAccountId}";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Title", transactionViewModel.Title),
                new KeyValuePair <string, string>("Description", transactionViewModel.Description),
                new KeyValuePair <string, string>("Amount", transactionViewModel.Amount.ToString()),
                new KeyValuePair <string, string>("Date", transactionViewModel.Date.ToString()),
                new KeyValuePair <string, string>("CategoryId", transactionViewModel.CategoryId.ToString()),
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "Transaction Created!");
                return(RedirectToAction("HouseholdTransactions", "Transaction", new { Id = transactionViewModel.HouseholdId }));
            }
            else
            {
                TransactionHelpers.SetDropDownLists(transactionViewModel, Request);
                if (TransactionHelpers.BankAccntOrCategoriesIsNull(transactionViewModel, TempData))
                {
                    return(RedirectToAction("Index", "Household"));
                }

                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);

                return(View(transactionViewModel));
            }
        }
        public ActionResult HouseholdTransactions(int?Id)
        {
            if (Id is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/transaction/getallbyhousehold/{Id}";

            var token      = Request.Cookies["UserAuthCookie"].Value;
            var authHeader = new AuthenticationHeaderValue("Bearer", token);

            HttpClientContext.httpClient.DefaultRequestHeaders.Authorization = authHeader;

            // Handling lack of connection??? try catch?
            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                var responseResult = response.Content.ReadAsStringAsync().Result;

                var datas = JsonConvert.DeserializeObject <List <TransactionViewModel> >(responseResult);

                foreach (var item in datas)
                {
                    item.CategoryName    = HouseholdHelpers.GetCategoryName(item.CategoryId, Request);
                    item.BankAccountName = HouseholdHelpers.GetBankAccountName(item.BankAccountId, Request);
                    item.UserCanEdit     = TransactionHelpers.IsUserCreator(item.Id, Request, TempData);
                }

                var viewModel = new TransactionListViewModel
                {
                    Transactions             = datas,
                    HouseholdId              = (int)Id,
                    IsHouseholdOwnerOrMember = HouseholdHelpers.IsUserCreatorOrMember((int)Id, Request, TempData)
                };
                return(View(viewModel));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("Index", "Household"));
            }
        }
        public ActionResult Invites()
        {
            var url = $"{ProjectConstants.APIURL}/api/household/getallinvites";

            var response       = HttpClientContext.httpClient.GetAsync(url).Result;
            var responseResult = response.Content.ReadAsStringAsync().Result;

            if (response.IsSuccessStatusCode)
            {
                var datas = JsonConvert.DeserializeObject <List <InviteViewModel> >(responseResult);

                return(View(datas));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("Index", "Household"));
            }
        }
        public ActionResult RegisterUser(RegisterUserViewModel registerUserViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            var url = $"{ProjectConstants.APIURL}/api/Account/Register";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Email", registerUserViewModel.Email),
                new KeyValuePair <string, string>("Password", registerUserViewModel.Password),
                new KeyValuePair <string, string>("ConfirmPassword", registerUserViewModel.ConfirmPassword)
            };

            // x-www-form-encoded tag, just like in post man, so that the data is sent on the body.
            var encodedParameters = new FormUrlEncodedContent(parameters);

            // Handling lack of connection??? try catch?
            var response = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                if (!LogUserIn(registerUserViewModel.Email, registerUserViewModel.Password))
                {
                    ModelState.AddModelError("", "There was an error logging you in..");
                    return(View());
                }
                else
                {
                    TempData.Add("Message", "Account Created!");
                    return(RedirectToAction("Index", "Household"));
                }
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View());
            }
        }
        public ActionResult ResetPassword(ResetPasswordViewModel resetPasswordViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View());
            }

            var url = $"{ProjectConstants.APIURL}/api/Account/ResetPassword";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("NewPassword", resetPasswordViewModel.Password),
                new KeyValuePair <string, string>("ConfirmPassword", resetPasswordViewModel.ConfirmPassword),
                new KeyValuePair <string, string>("Token", resetPasswordViewModel.Token),
                new KeyValuePair <string, string>("Email", resetPasswordViewModel.Email)
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                // Log user in
                if (!LogUserIn(resetPasswordViewModel.Email, resetPasswordViewModel.Password))
                {
                    ModelState.AddModelError("", "There was an error logging you in..");
                    return(View());
                }
                else
                {
                    TempData.Add("Message", "Password Changed!");
                    return(RedirectToAction("Index", "Household"));
                }
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(View());
            }
        }
        public ActionResult Invite(InviteUserViewModel inviteUserViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(inviteUserViewModel));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/invite/{inviteUserViewModel.HouseholdId}";

            var callbackUrl = Url.Action("Join", "Household", new { Id = inviteUserViewModel.HouseholdId }, Request.Url.Scheme);

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Email", inviteUserViewModel.Email),
                new KeyValuePair <string, string>("CallbackUrl", callbackUrl),
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "User Invited to the household!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                if (inviteUserViewModel != null)
                {
                    ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                    return(View(inviteUserViewModel));
                }
                else
                {
                    ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                    return(RedirectToAction("Index", "Household"));
                }
            }
        }
        public ActionResult Leave(int?Id)
        {
            if (ErrorHelpers.IdIsInvalid(Id, TempData))
            {
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/leave/{Id}";

            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "You've left the household!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("Index", "Household"));
            }
        }
        public ActionResult Create(CreateHouseholdViewModel createHouseholdViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(createHouseholdViewModel));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/create";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Name", createHouseholdViewModel.Name),
                new KeyValuePair <string, string>("Description", createHouseholdViewModel.Description)
            };

            // x-www-form-encoded tag, just like in post man, so that the data is sent on the body.
            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "Household Created!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                if (createHouseholdViewModel != null)
                {
                    ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                    return(View(createHouseholdViewModel));
                }
                else
                {
                    ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                    return(View());
                }
            }
        }
Example #19
0
        public ActionResult Create(CreateBankAccountViewModel bankAccountViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(bankAccountViewModel));
            }

            var url = $"{ProjectConstants.APIURL}/api/bankaccount/create/{bankAccountViewModel.HouseholdId}";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Name", bankAccountViewModel.Name),
                new KeyValuePair <string, string>("Description", bankAccountViewModel.Description)
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData["Message"] = "Bank Account Created!";
                return(RedirectToAction("HouseholdBankAccounts", "BankAccount", new { Id = bankAccountViewModel.HouseholdId }));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);

                if (bankAccountViewModel != null)
                {
                    return(View(bankAccountViewModel));
                }
                else
                {
                    return(RedirectToAction("Index", "Household"));
                }
            }
        }
        public ActionResult Edit(int?Id)
        {
            // Category Id
            if (Id is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/transaction/getbyid/{Id}";

            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                var responseResult = response.Content.ReadAsStringAsync().Result;

                var data = JsonConvert.DeserializeObject <EditTransactionViewModel>(responseResult);

                TransactionHelpers.SetCategoryDropDownList(data, Request);

                if (data.Categories is null)
                {
                    TempData.Add("Message", "Error: Categories missing");
                    TempData.Add("MessageColour", "danger");
                    return(RedirectToAction("Index", "Household"));
                }

                return(View(data));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("Index", "Household"));
            }
        }
        public ActionResult Edit(EditHouseholdViewModel editHouseholdViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View(editHouseholdViewModel));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/edit/{editHouseholdViewModel.Id}";

            var parameters = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("Name", editHouseholdViewModel.Name),
                new KeyValuePair <string, string>("Description", editHouseholdViewModel.Description)
            };

            var encodedParameters = new FormUrlEncodedContent(parameters);
            var response          = HttpClientContext.httpClient.PostAsync(url, encodedParameters).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", $"Household '{editHouseholdViewModel.Name}' Edited!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                if (editHouseholdViewModel != null)
                {
                    ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                    return(View(editHouseholdViewModel));
                }
                else
                {
                    ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                    return(RedirectToAction("Index", "Household"));
                }
            }
        }
        public ActionResult Join(int?Id)
        {
            if (Id is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/join/{Id}";

            var response = HttpClientContext.httpClient.PostAsync(url, null).Result;

            if (response.IsSuccessStatusCode)
            {
                TempData.Add("Message", "You've joined the household!");
                return(RedirectToAction("Index", "Household"));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("LogIn", "Account"));
            }
        }
        public ActionResult Details(int?Id)
        {
            // HouseholdId
            // Last 10 Transactions of those accounts/ grouped by category. -> Do that on that backend

            if (Id is null)
            {
                TempData.Add("Message", "Improper Id");
                TempData.Add("MessageColour", "danger");
                return(RedirectToAction("Index", "Household"));
            }

            var url = $"{ProjectConstants.APIURL}/api/household/getbyid/{Id}";

            var token      = Request.Cookies["UserAuthCookie"].Value;
            var authHeader = new AuthenticationHeaderValue("Bearer", token);

            HttpClientContext.httpClient.DefaultRequestHeaders.Authorization = authHeader;

            // Handling lack of connection??? try catch?
            var response = HttpClientContext.httpClient.GetAsync(url).Result;

            if (response.IsSuccessStatusCode)
            {
                var responseResult = response.Content.ReadAsStringAsync().Result;

                var datas = JsonConvert.DeserializeObject <HouseholdBindingModel>(responseResult);
                // Organize data into HouseholdDetailsViewModel
                var householdDetails = new HouseholdDetailsViewModel()
                {
                    NetSum                = datas.BankAccounts.Sum(acnt => acnt.Balance),
                    HouseholdId           = (int)Id,
                    BankAccountViewModels = datas.BankAccounts.Select(p => new BankAccountTransactionsViewModel()
                    {
                        Id                    = p.Id,
                        Name                  = p.Name,
                        Description           = p.Description,
                        Balance               = p.Balance,
                        TransactionViewModels = datas.Transactions.Where(trnsctn => trnsctn.BankAccountId == p.Id).Select(x => new TransactionViewModel()
                        {
                            Id           = x.Id,
                            Title        = x.Title,
                            Description  = x.Description,
                            Date         = x.Date,
                            DateCreated  = x.DateCreated,
                            DateUpdated  = x.DateUpdated,
                            IsVoid       = x.IsVoid,
                            Amount       = x.Amount,
                            CreatorId    = x.CreatorId,
                            CategoryId   = x.CategoryId,
                            CategoryName = HouseholdHelpers.GetCategoryName(x.CategoryId, Request)
                        }).GroupBy(transaction => transaction.CategoryName).ToList()
                    }).ToList()
                };

                return(View(householdDetails));
            }
            else
            {
                ErrorHelpers.HandleResponseErrors(response, TempData, ModelState);
                return(RedirectToAction("Index", "Household"));
            }
        }