public ActionResult Create(int? themeId, int? projectGroupId, GroupWorkStatus status, string evaluationJSON)
        {
            if (!themeId.HasValue)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            if (!projectGroupId.HasValue)
            {
                ModelState.AddModelError("ProjectGroupId", "グループを選択してください。");
            }

            if (string.IsNullOrEmpty(evaluationJSON))
            {
                ModelState.AddModelError("DocumentID", "評価を入力してください。");
            }

            var db = this.DbContext;
            var themeQuery = db.Themes
                .Where(t => t.ID == themeId.Value && t.Project.ID == this.Project.ID);
            LogUtility.DebugWriteQuery(themeQuery);

            var theme = themeQuery.FirstOrDefault();
            if (theme == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            GroupWork groupwork = new GroupWork
            {
                EvaluationJSON = evaluationJSON,
                Theme = theme,
                Status = status
            };

            groupwork.ProjectGroup =
                db.Groups.OfType<ProjectGroup>().FirstOrDefault(pg => pg.ID == projectGroupId.Value && pg.Accessibility == ProjectGroupAccessibility.Public);

            if (groupwork.ProjectGroup.Accessibility != ProjectGroupAccessibility.Public)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            var groupWorkForCheck = db.GroupWorks.FirstOrDefault(gw => gw.ThemeID == themeId && gw.ProjectGroupID == projectGroupId);

            if (groupWorkForCheck != null)
            {
                ModelState.AddModelError("ProjectGroupId", "選択したグループの評価がすでに存在します。");
            }

            ViewBag.Project = this.Project;
            ViewBag.ProjectGroups = CreateProjectGroupList(projectGroupId);

            if (!ModelState.IsValid)
            {
                return View(groupwork);
            }

            db.Projects.Attach(this.Project);
            db.GroupWorks.Add(groupwork);
            db.Themes.Attach(groupwork.Theme);
            db.Groups.Attach(groupwork.ProjectGroup);

            db.SaveChanges();

            return RedirectToAction("Index", new { selectedThemeId = themeId.Value });
        }
        public ActionResult Create(int?themeId, int?projectGroupId, GroupWorkStatus status, string evaluationJSON)
        {
            if (!themeId.HasValue)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (!projectGroupId.HasValue)
            {
                ModelState.AddModelError("ProjectGroupId", "グループを選択してください。");
            }

            if (string.IsNullOrEmpty(evaluationJSON))
            {
                ModelState.AddModelError("DocumentID", "評価を入力してください。");
            }

            var db         = this.DbContext;
            var themeQuery = db.Themes
                             .Where(t => t.ID == themeId.Value && t.Project.ID == this.Project.ID);

            LogUtility.DebugWriteQuery(themeQuery);

            var theme = themeQuery.FirstOrDefault();

            if (theme == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            GroupWork groupwork = new GroupWork
            {
                EvaluationJSON = evaluationJSON,
                Theme          = theme,
                Status         = status
            };

            groupwork.ProjectGroup =
                db.Groups.OfType <ProjectGroup>().FirstOrDefault(pg => pg.ID == projectGroupId.Value && pg.Accessibility == ProjectGroupAccessibility.Public);

            if (groupwork.ProjectGroup.Accessibility != ProjectGroupAccessibility.Public)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var groupWorkForCheck = db.GroupWorks.FirstOrDefault(gw => gw.ThemeID == themeId && gw.ProjectGroupID == projectGroupId);

            if (groupWorkForCheck != null)
            {
                ModelState.AddModelError("ProjectGroupId", "選択したグループの評価がすでに存在します。");
            }

            ViewBag.Project       = this.Project;
            ViewBag.ProjectGroups = CreateProjectGroupList(projectGroupId);

            if (!ModelState.IsValid)
            {
                return(View(groupwork));
            }

            db.Projects.Attach(this.Project);
            db.GroupWorks.Add(groupwork);
            db.Themes.Attach(groupwork.Theme);
            db.Groups.Attach(groupwork.ProjectGroup);

            db.SaveChanges();

            return(RedirectToAction("Index", new { selectedThemeId = themeId.Value }));
        }