// GET: UserProjects/EditScheduleFS/5
        public async Task <ActionResult> EditScheduleFS(int?id, bool deleteAbandonedSchedule = false)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            // load project from db, confirm that it's not null
            UserProjectsRepository repo      = new UserProjectsRepository();
            UserProjectViewModel   viewModel = await repo.GetUserProject(id);

            if (viewModel == null)
            {
                return(HttpNotFound());
            }

            // authorize user
            ApplicationUser user = await ReturnCurrentUserAsync();

            if (viewModel.ApplicationUserID == user.Id)
            {
                ProjectScheduleVersionsRepository    scheduleRepo = new ProjectScheduleVersionsRepository();
                Tuple <ProjectScheduleVersion, bool> newSchedule  = await scheduleRepo.CloneProjectScheduleVersionForEdit(viewModel.ID);

                if (deleteAbandonedSchedule)
                {
                    return(RedirectToAction("RemoveProjectScheduleVersion", new { id = newSchedule.Item1.ID }));
                }
                viewModel.ProjectScheduleVersion = newSchedule.Item1;
                viewModel.FullScreen             = true;
                viewModel.ReadOnly          = false;
                viewModel.AbandonedSchedule = newSchedule.Item2;
                return(View(viewModel));
            }
            else
            {
                Danger(unauthorizedAccessMessage, true);
                return(RedirectToAction("Index"));
            }
        }
        public async Task <ActionResult> RemoveProjectScheduleVersion(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            // load schedule from db, confirm that it's not null
            ProjectScheduleVersionsRepository schedulesRepo = new ProjectScheduleVersionsRepository();
            var schedule = await schedulesRepo.FindProjectScheduleVersion(id.Value);

            if (schedule == null)
            {
                return(HttpNotFound());
            }

            // load project from db, confirm that it's not null
            UserProjectsRepository projectsRepo = new UserProjectsRepository();
            UserProjectViewModel   project      = await projectsRepo.GetUserProject(schedule.ProjectID);

            if (project == null)
            {
                return(HttpNotFound());
            }

            // authorize user
            ApplicationUser user = await ReturnCurrentUserAsync();

            if (project.ApplicationUserID == user.Id)
            {
                if (await schedulesRepo.RemoveProjectScheduleVersion(id.Value))
                {
                    return(RedirectToAction("EditScheduleFS", new { id = project.ID }));
                }
            }
            Danger("Error: Unable to abandon unsaved changes.");
            return(RedirectToAction("Details", new { id = project.ID }));
        }