public async Task <IActionResult> Settings(HomeSettingPostViewModel settings)
        {
            if (settings.RentDueDateDay <= 0 || settings.RentDueDateDay >= 28)
            {
                ModelState.AddModelError("RentDueDateDay", "Rent due date day value can only be between 1 and 27, included.");
                return(View(settings));
            }

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/settings";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.PostAsJsonAsync(requestUri, settings))
                {
                    var content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        settings = JsonConvert.DeserializeObject <HomeSettingPostViewModel>(content);

                        if (settings.ChangeHttpSession)
                        {
                            HttpContext.Session.SetString("HomeName", settings.HomeName);
                        }
                    }
                }
            }

            return(RedirectToAction(nameof(Index)));
        }
        private async Task <List <string> > GetLinks(long targetObjectID)
        {
            var links = new List <ObjectLinkPostViewModel>();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/objectlinks/{targetObjectID}";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        links = JsonConvert.DeserializeObject <List <ObjectLinkPostViewModel> >(content);
                    }
                }
            }

            var result = ObjectLinksRenderer.BuildLinks(links);

            return(result);
        }
        public async Task <IActionResult> Settings()
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString("HomeID")))
            {
                return(RedirectToAction("Login", "Home"));
            }

            var settings = new HomeSettingPostViewModel();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/settings";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        settings = JsonConvert.DeserializeObject <HomeSettingPostViewModel>(content);
                    }
                }
            }

            if (settings != null)
            {
                return(View(settings));
            }

            return(View());
        }
        public async Task <IActionResult> PostLink(string targetObjectID, string[] objectBIDs, string[] objectLinkTypes)
        {
            var link = new ObjectLinkPostViewModel()
            {
                ObjectBID      = long.Parse(objectBIDs[0]),
                ObjectLinkType = objectLinkTypes[0],
                TargetObjectID = long.Parse(targetObjectID)
            };

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/objectlinks/post";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.PostAsJsonAsync(requestUri, link))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        link = JsonConvert.DeserializeObject <ObjectLinkPostViewModel>(content);
                    }
                }
            }

            return(Json(ObjectLinksRenderer.BuildPostLink(link)));
        }
        public async Task <IActionResult> PostComment(long targetObjectID, string comment)
        {
            var result     = string.Empty;
            var theComment = new CommentPostViewModel()
            {
                Details        = comment,
                TargetObjectID = targetObjectID
            };

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/comments/post";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.PostAsJsonAsync(requestUri, theComment))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        result = content;
                    }
                }
            }

            return(Json(result));
        }
        public async Task <IActionResult> PostEvent(string targetObjectID, string name, string description, string startdate, string enddate, string[] participants)
        {
            var @event = new EventPostViewModel()
            {
                HomeID             = (long)CurrentHomeID,
                Name               = name,
                Details            = description,
                StartDate          = DateTime.Parse(startdate),
                EndDate            = DateTime.Parse(enddate),
                ParticipantUserIDs = participants,
                TargetObjectID     = long.Parse(targetObjectID)
            };

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/events/post";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.PostAsJsonAsync(requestUri, @event))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        @event = JsonConvert.DeserializeObject <EventPostViewModel>(content);
                    }
                }
            }

            return(Json(EventsRenderer.BuildPostEvent(@event)));
        }
        public async Task <IActionResult> Edit(long ID, U model)
        {
            if (ID != model.ID)
            {
                return(new Error404NotFoundViewResult());
            }

            if (ModelState.IsValid)
            {
                using (var httpClient = new HttpClient())
                {
                    var requestUri = $"{Configuration.DefaultAPI}/home/{CurrentHomeID}/{CurrentAreaName}/createedit";
                    httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                    httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                    using (var response = await httpClient.PostAsJsonAsync(requestUri, model))
                    {
                        var content = await response.Content.ReadAsStringAsync();

                        if (response.IsSuccessStatusCode)
                        {
                            return(RedirectToAction(nameof(Index)));
                        }
                        else
                        {
                            return(View("_Edit", model));
                        }
                    }
                }
            }

            return(View("_Edit", model));
        }
        public async Task <IActionResult> Index()
        {
            if (string.IsNullOrEmpty(HttpContext.Session.GetString("UserID")))
            {
                return(RedirectToAction("Login", "Account"));
            }

            if (string.IsNullOrEmpty(HttpContext.Session.GetString("HomeID")))
            {
                return(RedirectToAction("Login"));
            }

            var model  = new HomePageDisplayModel();
            var status = new HomeStatusPostViewModel();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/page";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        model = JsonConvert.DeserializeObject <HomePageDisplayModel>(content);
                    }
                }
            }

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/status";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        status = JsonConvert.DeserializeObject <HomeStatusPostViewModel>(content);
                    }
                }
            }

            model.HomeStatus     = status;
            ViewData["Username"] = CurrentUserName;

            return(View(model));
        }
        public async Task <JsonResult> GetHomeStatus()
        {
            var result = string.Empty;

            if (!string.IsNullOrEmpty(HttpContext.Session.GetString("HomeID")))
            {
                var status = new HomeStatusPostViewModel();
                var user   = new UserPostViewModel();

                using (var httpClient = new HttpClient())
                {
                    var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/status";
                    httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                    httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                    using (var response = await httpClient.GetAsync(requestUri))
                    {
                        string content = await response.Content.ReadAsStringAsync();

                        if (response.IsSuccessStatusCode)
                        {
                            status = JsonConvert.DeserializeObject <HomeStatusPostViewModel>(content);
                        }
                    }
                }

                if (status.ID > 0)
                {
                    using (var httpClient = new HttpClient())
                    {
                        var requestUri = $"{Configuration.DefaultAPI}/users/{status.UserID}";
                        httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                        httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                        using (var response = await httpClient.GetAsync(requestUri))
                        {
                            string content = await response.Content.ReadAsStringAsync();

                            if (response.IsSuccessStatusCode)
                            {
                                user = JsonConvert.DeserializeObject <UserPostViewModel>(content);
                            }
                        }
                    }

                    result = $"{status.Status};{user.Name};{status.Details}";
                    return(Json(result));
                }
            }

            result = $"1;system_generated;No one has set a status yet!";
            return(Json(result));
        }
        public async Task <ActionResult> DeleteImage(long ID)
        {
            var image = new ImagePostViewModel();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/images/image/{ID}";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        image = JsonConvert.DeserializeObject <ImagePostViewModel>(content);
                    }
                }
            }

            if (image == null)
            {
                return(Json(new { success = false, message = "404: Image does not exist." }));
            }
            else
            {
                return(Json(new { success = false, message = "404: Image does not exist." }));

                // TODO: This here needs to send request to API
                // Also, make sure directory path is outside of wwwroot
                //if (Directory.Exists(ImagesPath))
                //{
                //    var di = new DirectoryInfo(ImagesPath);
                //    foreach (var file in di.GetFiles())
                //    {
                //        if (file.Name == image.Name)
                //        {
                //            file.Delete();
                //            break;
                //        }
                //    }

                //    BaseWebService.Delete(image);

                //    return Json(new { success = true, message = "Image deleted successfully." });
                //}
                //else
                //    return Json(new { success = false, message = "404: Images path does not exist." });
            }
        }
        protected virtual async Task PopulateViewData(U model)
        {
            var users = await GetUsersInCurrentHome();

            var usersSelectList = users.Select(x => new SelectListItem()
            {
                Text = x.Name, Value = x.ID.ToString()
            }).ToList();

            ViewData["UsersSelectList"] = usersSelectList;

            // TODO: Brainstorm on more object link types...
            var objectLinkTypesSelectList = new List <SelectListItem>()
            {
                new SelectListItem()
                {
                    Text = "relates to", Value = "relates to", Selected = true
                }
            };

            ViewData["ObjectLinkTypeSelectList"] = objectLinkTypesSelectList;

            var objects = new List <BusinessObjectDisplayViewModel>();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/home/objects/{model.ObjectID}";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        objects = JsonConvert.DeserializeObject <List <BusinessObjectDisplayViewModel> >(content);
                    }
                }
            }

            var objectsSelectList = objects.Select(x => new SelectListItem()
            {
                Text = x.Name, Value = x.ObjectID.ToString()
            }).ToList();

            ViewData["ObjectBIDSelectList"] = objectsSelectList;
        }
        public async Task <ActionResult> SetHomeStatus(string homeStatusString, string homeStatusDetailsString)
        {
            if (!string.IsNullOrEmpty(HttpContext.Session.GetString("HomeID")))
            {
                using (var httpClient = new HttpClient())
                {
                    var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/status?homeStatusString={homeStatusString}&homeStatusDetailsString={homeStatusDetailsString}";
                    httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                    httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                    using (var response = await httpClient.PostAsJsonAsync(requestUri, new { }))
                    {
                    }
                }
            }

            return(Ok());
        }
        public async Task <ActionResult> CreateMessage(string username, string messageText)
        {
            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/chat?username={username}&messageText={messageText}";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.PostAsJsonAsync(requestUri, new { }))
                {
                    var content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        return(Ok());
                    }
                }
            }

            return(StatusCode(StatusCodes.Status500InternalServerError));
        }
        public async Task<JsonResult> GetEvents()
        {
            var result = new List<EventViewModel>();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/events";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                        result = JsonConvert.DeserializeObject<List<EventViewModel>>(content);
                }
            }

            return Json(result.ToArray());
        }
        private async Task <List <string> > GetComments(long targetObjectID)
        {
            var result = new List <string>();

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/comments/{targetObjectID}";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        result = JsonConvert.DeserializeObject <List <string> >(content);
                    }
                }
            }

            return(result);
        }
        public async Task <JsonResult> GetCount()
        {
            var result = 0;

            using (var httpClient = new HttpClient())
            {
                var requestUri = $"{Configuration.DefaultAPI}/{CurrentControllerName}/count";
                httpClient.DefaultRequestHeaders.Add("CurrentUserID", CurrentUserID.ToString());
                httpClient.DefaultRequestHeaders.Add("CurrentHomeID", CurrentHomeID.ToString());

                using (var response = await httpClient.GetAsync(requestUri))
                {
                    string content = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        result = int.Parse(content);
                    }
                }
            }

            return(Json(result));
        }