Beispiel #1
0
        internal void AttachFile(GroupWork groupwork, HttpPostedFileBase uploadedFile)
        {
            if (groupwork == null || uploadedFile == null)
            {
                return;
            }

            // TODO: 見直し。プロトでは特に検証せずDBに保存する。
            var fileName   = Path.GetFileName(uploadedFile.FileName);
            var extension  = Path.GetExtension(fileName);
            var binaryData = GetBytes(uploadedFile.InputStream);

            if (binaryData.Length > 0)
            {
                var document = new Document
                {
                    ID            = Guid.NewGuid(),
                    Uploaded      = this.ExecutionContext.Now,
                    User          = this.CurrentUser,
                    FileExtension = extension,
                    BinaryData    = binaryData,
                };
                this.DbContext.Documents.Add(document);
                groupwork.AttachedFileName   = fileName;
                groupwork.AttachedDocumentID = document.ID;
                groupwork.Status             = GroupWorkStatus.Submitted;
            }
        }
        // GET: /CompanyProjectGroupWork/Details/5
        public ActionResult Details(int?themeId, int?projectGroupId)
        {
            if (themeId == null || projectGroupId == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var db             = this.DbContext;
            var groupworkQuery = db.GroupWorks
                                 .Where(gw => gw.ThemeID == themeId && gw.ProjectGroupID == projectGroupId && gw.Theme.Project.ID == this.Project.ID)
                                 .Include(gw => gw.Theme)
                                 .Include(gw => gw.ProjectGroup);

            LogUtility.DebugWriteQuery(groupworkQuery);

            GroupWork groupwork = groupworkQuery.FirstOrDefault();

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

            ViewBag.Project = this.Project;
            ViewBag.Theme   = groupwork.Theme;

            return(View(groupwork));
        }
        public ActionResult DeleteConfirmed(int?themeId, int?projectGroupId)
        {
            ViewBag.Project = this.Project;

            var db             = this.DbContext;
            var groupworkQuery = db.GroupWorks
                                 .Include(gw => gw.ProjectGroup)
                                 .Where(gw =>
                                        gw.ThemeID == themeId &&
                                        gw.ProjectGroupID == projectGroupId &&
                                        gw.Theme.Project.ID == this.Project.ID &&
                                        gw.ProjectGroup.Accessibility == ProjectGroupAccessibility.Public);

            LogUtility.DebugWriteQuery(groupworkQuery);

            GroupWork groupwork = groupworkQuery.FirstOrDefault();

            if (groupwork != null)
            {
                db.GroupWorks.Remove(groupwork);
                db.SaveChanges();
            }

            return(RedirectToAction("Index", new { selectedThemeId = themeId }));
        }
        public ActionResult Edit([Bind(Include = "ThemeID,ProjectGroupID,EvaluationJSON,Status")] GroupWork groupwork)
        {
            if (!ModelState.IsValid)
            {
                return(View(groupwork));
            }

            var db             = this.DbContext;
            var groupworkQuery = db.GroupWorks
                                 .Where(gw => gw.ThemeID == groupwork.ThemeID &&
                                        gw.ProjectGroupID == groupwork.ProjectGroupID &&
                                        gw.Theme.Project.ID == this.Project.ID &&
                                        gw.ProjectGroup.Accessibility == ProjectGroupAccessibility.Public);

            LogUtility.DebugWriteQuery(groupworkQuery);

            GroupWork targetGroupwork = groupworkQuery.FirstOrDefault();

            if (targetGroupwork != null)
            {
                targetGroupwork.EvaluationJSON = groupwork.EvaluationJSON;
                targetGroupwork.Status         = groupwork.Status;
                db.SaveChanges();
            }

            return(RedirectToAction("Index", new { selectedThemeId = groupwork.ThemeID }));
        }
Beispiel #5
0
        public ActionResult GroupWork(int?themeId, int?groupId, bool?submitted, HttpPostedFileBase uploadedFile)
        {
            if (themeId == null || groupId == null || submitted == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var theme = GetTheme(themeId.Value);

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

            var group = GetGroup(groupId.Value);

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

            var tuple     = GetGroupWorkAndUploadedDate(themeId.Value, groupId.Value);
            var groupWork = tuple.Item1;

            // 評価済みの場合は更新不可
            if (groupWork != null && groupWork.Status == GroupWorkStatus.Evaluated)
            {
                return(RedirectToAction("Details", new { themeId = themeId }));
            }

            if (groupWork == null)
            {
                groupWork = new GroupWork {
                    Theme = theme, ProjectGroup = group, EvaluationJSON = "{}"
                };
                this.DbContext.GroupWorks.Add(groupWork);
            }

            AttachFile(groupWork, uploadedFile);
            groupWork.Status = (submitted == true) ? GroupWorkStatus.Submitted : GroupWorkStatus.Default;
            this.DbContext.SaveChanges();

            return(RedirectToAction("Details", new { themeId = themeId }));
        }
        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 }));
        }