// GET: /CompanyHome/Create
        public ActionResult Create()
        {
            DateTime now = ctx.Now;

            // ProjectDate は30分単位の時間で初期化しておく
            Project project = new Project()
            {
                ProjectDate = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute / 30 * 30, 0),
                Category = ProjectCategory.Career
            };

            return View(project);
        }
 /// <summary>
 /// プロジェクトと課題テーマのIDを指定して、課題テーマを取得します。
 /// </summary>
 /// <param name="db">DBコンテキスト。</param>
 /// <param name="project">現在のプロジェクト。</param>
 /// <param name="id">課題テーマのID。</param>
 /// <returns>
 /// 現在のプロジェクトに関連づいた課題テーマのうち、指定したIDを持つものが見つかれば、そのインスタンス。
 /// 見つからない場合はnull。
 /// </returns>
 internal static Theme GetThemeById(Entities db, Project project, int? id)
 {
     System.Diagnostics.Debug.Assert(db != null, "db is null");
     System.Diagnostics.Debug.Assert(project != null, "project is null");
     if (id == null)
     {
         return null;
     }
     var theme = db.Themes.FirstOrDefault(x => x.ID == id && x.Project.ID == project.ID);
     return theme;
 }
 internal static ProjectGroup FindGroup(Entities db, Project project, int id)
 {
     var targetGroupQuery = db.Groups
         .OfType<ProjectGroup>()
         .Where(pg => pg.ID == id && pg.Project.ID == project.ID)
         .Include(pg => pg.ParticipantUsers);
     LogUtility.DebugWriteQuery(targetGroupQuery);
     return targetGroupQuery.FirstOrDefault();
 }
 internal static ParticipantUser FindUser(Entities db, Project project, int id)
 {
     var targetUser = db.Entry(project)
         .Collection(p => p.ParticipantUsers)
         .Query()
         .Include(u => u.ParticipantUser.Groups)
         .Select(x => x.ParticipantUser)
         .FirstOrDefault(u => u.ID == id);
     return targetUser;
 }
 internal static IList<ParticipantUserGroup> GetRelationships(Entities db, Project project)
 {
     // projectを元に、ParticipantUserとProjectGroupの関連を取得する。
     var relationshipQuery = from pg in db.Groups.OfType<ProjectGroup>()
                             where pg.Project.ID == project.ID
                             from pug in pg.ParticipantUsers
                             select pug;
     LogUtility.DebugWriteQuery(relationshipQuery);
     var relationships = relationshipQuery.ToList();
     return relationships;
 }
 internal static IList<ProjectGroup> GetGroups(Entities db, Project project)
 {
     // projectを元に、関連するProjectGroupsを取得する。
     // クエリを単純にするため、ユーザーの情報は取得しない。
     // ユーザーの情報が必要な場合は、GetUsers()とGetRelationships()を呼び出すこと。
     // そうすれば、ParticipantUser -> ParticipantUserGroup の関連と、
     // ParticipantUserGroup -> Group の関連は、Entity Frameworkが自動的に設定してくれる。
     var groupsQuery = from pg in db.Groups.OfType<ProjectGroup>()
                       where pg.Project.ID == project.ID
                       select pg;
     LogUtility.DebugWriteQuery(groupsQuery);
     var groups = groupsQuery.ToList();
     return groups;
 }
 internal static IList<ParticipantUser> GetUsers(Entities db, Project project)
 {
     // projectを元に、関連するParticipantUserを取得する。
     // クエリを単純にするため、参加しているグループの情報は取得しない。
     // グループの情報が必要な場合は、GetGroups()とGetRelationships()を呼び出すこと。
     // そうすれば、ParticipantUser -> ParticipantUserGroup の関連と、
     // ParticipantUserGroup -> Group の関連は、Entity Frameworkが自動的に設定してくれる。
     var usersQuery = from pup in db.ParticipantUserProjects
                      where pup.Project.ID == project.ID
                      select pup.ParticipantUser;
     LogUtility.DebugWriteQuery(usersQuery);
     var users = usersQuery.ToList();
     return users;
 }