コード例 #1
0
        public ActionResult ExitProjectSeries(string projectSeriesGuid)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.ProjectSeries, projectSeriesGuid, PermissionType.Read);
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                var projectSeries = projectSeriesLogicModel.Instance;

                CommUtils.Assert(!IsCurrentUser(projectSeries.CreateUserName),
                                 "当前用户[{0}]是项目[{1}]的创建者,不能退出项目", CurrentUserName, projectSeries.Name);

                var projectLogicModel = projectSeriesLogicModel.CurrentProject;
                var project = projectLogicModel.Instance;
                var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeries);

                if (IsCurrentUser(projectSeries.PersonInCharge))
                {
                    projectSeries.PersonInCharge = projectSeries.CreateUserName;
                    permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string>()
                    {
                        CurrentUserName
                    });
                }
                else if (m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName))
                {
                    var teamAdmins = m_dbAdapter.TeamAdmin.GetByProjectId(project.ProjectId);
                    var teamAdmin = teamAdmins.FirstOrDefault(x => x.UserName.Equals(CurrentUserName, StringComparison.CurrentCultureIgnoreCase));

                    m_dbAdapter.TeamAdmin.Delete(teamAdmin);
                    permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string>()
                    {
                        CurrentUserName
                    });
                }
                else if (m_dbAdapter.TeamMember.IsTeamMember(project.ProjectId, CurrentUserName))
                {
                    var teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                    var teamMember = teamMembers.FirstOrDefault(x => x.UserName.Equals(CurrentUserName, StringComparison.CurrentCultureIgnoreCase));

                    m_dbAdapter.TeamMember.Remove(teamMember);
                    permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string>()
                    {
                        CurrentUserName
                    });
                }

                return ActionUtils.Success(1);
            }));
        }
コード例 #2
0
        public ActionResult RemoveTeamMembers(string projectSeriesGuid, string userNames)
        {
            return(ActionUtils.Json(() =>
            {
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                var project = projectSeriesLogicModel.CurrentProject.Instance;
                CommUtils.Assert(IsAdmin(projectSeriesLogicModel.Instance, CurrentUserName) ||
                                 m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName),
                                 "当前用户[{0}]不是项目[{1}]的创建者/负责人/管理员", Platform.UserProfile.GetDisplayRealNameAndUserName(CurrentUserName),
                                 projectSeriesLogicModel.Instance.Name);

                var teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                var userNameList = CommUtils.Split(userNames).ToList();
                foreach (var userName in userNameList)
                {
                    CommUtils.Assert(teamMembers.Any(x => x.UserName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)),
                                     "查找项目成员[{0}]失败", userName);

                    CommUtils.Assert((!IsAdmin(projectSeriesLogicModel.Instance, userName)) &&
                                     (!m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, userName)),
                                     "检测到[{0}]是产品创建者/负责人,移除项目成员失败", userName);
                }

                var projectActivityLogicModel = projectSeriesLogicModel.CurrentProject.Activity;

                teamMembers = teamMembers.Where(x => userNameList.Contains(x.UserName)).ToList();
                foreach (var teamMember in teamMembers)
                {
                    m_dbAdapter.TeamMember.Remove(teamMember);
                    projectActivityLogicModel.Add(project.ProjectId, ActivityObjectType.TeamMember, teamMember.Guid, "删除项目成员:" + Platform.UserProfile.Get(teamMember.UserName).RealName);
                }

                var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeriesLogicModel.Instance);
                permissionLogicModel.RemoveUserPermissionByProjectSeries(userNameList);

                return ActionUtils.Success(1);
            }));
        }
コード例 #3
0
        public ActionResult AddTeamMembers(string projectSeriesGuid, string userNames, string permissions)
        {
            return(ActionUtils.Json(() =>
            {
                CommUtils.Assert(!string.IsNullOrWhiteSpace(permissions), "权限类型不能为空");
                var permissionList = CommUtils.ParseEnumList <PermissionType>(permissions, true);
                CommUtils.Assert(permissionList.Any(x => x == PermissionType.Read), "增加项目成员时,只读权限必须勾选");
                //判断操作者权限
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                var project = projectSeriesLogicModel.CurrentProject.Instance;
                CommUtils.Assert(IsAdmin(projectSeriesLogicModel.Instance, CurrentUserName) ||
                                 m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName),
                                 "当前用户[{0}]不是项目[{1}]的创建者/负责人/管理员", Platform.UserProfile.GetDisplayRealNameAndUserName(CurrentUserName),
                                 projectSeriesLogicModel.Instance.Name);

                //判断传入userName是否有效
                var userNameList = CommUtils.Split(userNames);
                foreach (var userName in userNameList)
                {
                    CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(userName), "用户[{0}]不存在", userName);
                    CommUtils.Assert((!IsAdmin(projectSeriesLogicModel.Instance, userName)) &&
                                     (!m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, userName)),
                                     "用户[{0}]是产品创建者/负责人/管理员,无法增加至项目成员", userName);
                }

                //判断项目成员是否已经添加
                var teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                foreach (var teamMember in teamMembers)
                {
                    CommUtils.Assert(!userNameList.Contains(teamMember.UserName),
                                     "项目成员中已经存在用户[{0}]", teamMember.UserName);
                }

                var projectActivityLogicModel = projectSeriesLogicModel.CurrentProject.Activity;

                //添加项目成员
                foreach (var userName in userNameList)
                {
                    var teamMember = new TeamMember
                    {
                        UserName = userName,
                        ProjectId = project.ProjectId,
                        Read = permissionList.Any(x => x == PermissionType.Read),
                        Write = permissionList.Any(x => x == PermissionType.Write),
                        Execute = permissionList.Any(x => x == PermissionType.Execute)
                    };

                    m_dbAdapter.TeamMember.Add(teamMember);
                    projectActivityLogicModel.Add(project.ProjectId, ActivityObjectType.TeamMember, teamMember.Guid, "增加项目成员:" + Platform.UserProfile.Get(teamMember.UserName).RealName);
                }

                teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                var newTeamMembers = teamMembers.Where(x => userNameList.Contains(x.UserName)).ToList();
                var adminUserNames = new List <string>();
                var teamAdmins = new List <TeamAdmin>();

                var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeriesLogicModel.Instance);
                permissionLogicModel.AddUserPermissionByProjectSeries(newTeamMembers, teamAdmins, adminUserNames);

                return ActionUtils.Success(1);
            }));
        }
コード例 #4
0
        public ActionResult ResetAllTeamMemberPermission(string projectSeriesGuid)
        {
            return(ActionUtils.Json(() =>
            {
                //获取所有有读取权限的用户
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                var project = projectSeriesLogicModel.CurrentProject.Instance;
                CommUtils.Assert(IsAdmin(projectSeriesLogicModel.Instance, CurrentUserName) ||
                                 m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName),
                                 "当前用户[{0}]不是项目[{1}]的创建者/负责人/管理员", Platform.UserProfile.GetDisplayRealNameAndUserName(CurrentUserName),
                                 projectSeriesLogicModel.Instance.Name);

                //只保留项目成员
                var projectSeries = projectSeriesLogicModel.Instance;
                var permissionList = m_dbAdapter.Permission.GetByObjectUid(projectSeriesGuid, PermissionObjectType.ProjectSeries, PermissionType.Read);
                var userNames = permissionList.Select(x => x.UserName).Distinct(StringComparer.OrdinalIgnoreCase).ToList();
                userNames.RemoveAll(x => IsAdmin(projectSeries, x) || m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, x));

                //从TeamMember表中移除没有读取权限的成员
                var teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                foreach (var teamMember in teamMembers)
                {
                    if (!userNames.Contains(teamMember.UserName))
                    {
                        m_dbAdapter.TeamMember.Remove(teamMember);
                    }
                }

                //增加有读取权限的成员到TeamMember中
                foreach (var userName in userNames)
                {
                    if (!teamMembers.Any(x => x.UserName.Equals(userName, StringComparison.CurrentCultureIgnoreCase)))
                    {
                        var teamMember = new TeamMember {
                            UserName = userName,
                            ProjectId = project.ProjectId,
                            Read = true,
                            Write = false,
                            Execute = false
                        };

                        m_dbAdapter.TeamMember.Add(teamMember);
                    }
                }

                //获取管理员(负责人 + 创建者)
                var adminUserNames = new List <string> {
                    projectSeries.CreateUserName, projectSeries.PersonInCharge
                };
                adminUserNames = adminUserNames.Distinct(StringComparer.OrdinalIgnoreCase).ToList();

                //获取所有项目成员
                teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);

                var teamAdmins = m_dbAdapter.TeamAdmin.GetByProjectId(project.ProjectId);

                var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeriesLogicModel.Instance);
                permissionLogicModel.AddUserPermissionByProjectSeries(teamMembers, teamAdmins, adminUserNames);

                return ActionUtils.Success(1);
            }));
        }
コード例 #5
0
        public ActionResult ImportTable(string projectSeriesGuid)
        {
            return(ActionUtils.Json(() =>
            {
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                var project = projectSeriesLogicModel.CurrentProject.Instance;
                CheckPermission(PermissionObjectType.Project, project.ProjectGuid, PermissionType.Write);

                var file = Request.Files[0];
                byte[] bytes = new byte[file.InputStream.Length];
                file.InputStream.Read(bytes, 0, bytes.Length);
                file.InputStream.Seek(0, SeekOrigin.Begin);

                Stream newStream = new MemoryStream(bytes);
                var tableHeaderRowsCount = ExcelUtils.GetTableHeaderRowsCount(newStream, 0, 0, tableHeader);
                var table = ExcelUtils.ParseExcel(file.InputStream, 0, tableHeaderRowsCount, 0, 9);

                var validation = new ExcelValidation();
                validation.Add(CellRange.Column(0), new CellTextValidation(1, 30));
                validation.Add(CellRange.Column(1), new CellTextValidation(1, 500));
                validation.Add(CellRange.Column(2), new CellTextValidation(1, 30));
                validation.Add(CellRange.Column(3), new CellDateValidation());
                validation.Add(CellRange.Column(4), new CellDateValidation(false));
                //检查工作状态
                Func <string, string> checkTaskStatus = (cellText) =>
                {
                    if (!string.IsNullOrWhiteSpace(cellText) && cellText != "-" && cellText != TranslateUtils.ToCnString(TaskStatus.Waitting) &&
                        cellText != TranslateUtils.ToCnString(TaskStatus.Overdue))
                    {
                        return "导入工作的工作状态只能为空、[等待]或[逾期]";
                    }
                    return string.Empty;
                };
                validation.Add(CellRange.Column(5), new CellCustomValidation(checkTaskStatus));
                //检查负责人
                int projectId = project.ProjectId;
                var personInCharges = GetPersonInCharges(projectSeriesLogicModel, projectId);
                Func <List <string>, string, string> checkPersonInCharge = (personInChargeList, cellText) =>
                {
                    var userName = GetPersonInCharge(cellText);
                    if (!personInChargeList.Contains(userName))
                    {
                        return "负责人[" + cellText + "]不存在";
                    }
                    return string.Empty;
                };
                validation.Add(CellRange.Column(6), new CellCustomValidation(checkPersonInCharge, personInCharges));
                //不检查只有taskGroup列,其他列均为空的行
                var columns = new List <CellRange>()
                {
                    CellRange.Column(2), CellRange.Column(3), CellRange.Column(4),
                    CellRange.Column(5), CellRange.Column(6), CellRange.Column(7), CellRange.Column(8)
                };
                Func <string, bool> ExceptCondition = (x) =>
                {
                    return x != string.Empty;
                };
                validation.JudgeColumn = new ColumnJudge(columns, ExceptCondition);
                //检查开始时间是否大于截止时间
                Func <object, object, string> lessThanOrEqualTo = (left, right) =>
                {
                    var leftText = left.ToString();
                    var rightText = right.ToString();
                    if (!string.IsNullOrWhiteSpace(leftText) && leftText != "-")
                    {
                        var startTime = DateTime.Parse(leftText);
                        var endTime = DateTime.Parse(rightText);
                        if (startTime > endTime)
                        {
                            return "开始时间[" + leftText + "]不能大于结束时间[" + rightText + "]";
                        }
                    }
                    return string.Empty;
                };
                validation.CompareColumn = new ColumnComparison(CellRange.Column(3), CellRange.Column(4), lessThanOrEqualTo);
                validation.Check(table, tableHeaderRowsCount);

                //创建taskGroups
                List <TaskGroup> newTaskGroups = new List <TaskGroup>();
                for (int iRow = 0; iRow < table.Count; iRow++)
                {
                    var row = table[iRow];
                    var taskGroup = ParseTaskGroups(newTaskGroups, row, iRow, projectId);
                    if (taskGroup != null)
                    {
                        newTaskGroups.Add(taskGroup);
                    }
                }

                var projectLogicModel = new ProjectLogicModel(CurrentUserName, project);
                var permissionLogicModel = new PermissionLogicModel(projectLogicModel);
                var projectSeries = projectSeriesLogicModel.Instance;

                newTaskGroups.ForEach(x => {
                    var taskGroup = m_dbAdapter.TaskGroup.NewTaskGroup(x.ProjectId, x.Name, x.Description);
                    permissionLogicModel.SetPermission(projectSeries, project, taskGroup.Guid, PermissionObjectType.TaskGroup);
                    projectLogicModel.Activity.Add(x.ProjectId, ActivityObjectType.TaskGroup, taskGroup.Guid, "新建工作组:" + taskGroup.Name);
                });

                //创建tasks
                var taskGroups = m_dbAdapter.TaskGroup.GetByProjectId(projectId);
                var dicTaskGroups = taskGroups.ToDictionary(x => x.Name);

                List <Task> tasks = new List <Task>();
                for (int iRow = 0; iRow < table.Count; iRow++)
                {
                    var row = table[iRow].ToList();
                    if (row.Count > 2 && (!string.IsNullOrWhiteSpace(row[2].ToString())) && row[2].ToString() != "-")
                    {
                        var taskGroup = dicTaskGroups[row[0].ToString()];
                        tasks.Add(ParseTasks(row, iRow, taskGroup.Id, project));
                    }
                }
                tasks.ForEach(x => m_dbAdapter.Task.NewTask(x));

                Dictionary <string, string> msgDic = new Dictionary <string, string>();
                foreach (var task in tasks)
                {
                    var msg = string.Format("创建task:shortCode={0};name={1};startTime={2};endTime={3};personInCharge={4};"
                                            + "taskStatus={5};taskTarget={6};taskDetail={7};projectId={8};projectName={9};taskGroupId={10}",
                                            task.ShortCode, task.Description, task.StartTime, task.EndTime, task.PersonInCharge, task.TaskStatus,
                                            task.TaskTarget, task.TaskDetail, task.ProjectId, task.ProjectName, task.TaskGroupId);
                    msgDic[task.ShortCode] = msg;
                }

                tasks.ForEach(x => {
                    permissionLogicModel.SetPermission(projectSeries, project, x.ShortCode, PermissionObjectType.Task);
                    projectLogicModel.Activity.Add(projectId, ActivityObjectType.Task, x.ShortCode, "创建工作:" + x.Description);
                    m_dbAdapter.Project.NewEditProductLog(EditProductType.CreateTask, x.ProjectId, msgDic[x.ShortCode], "");
                });

                var result = new {
                    taskGroupCount = newTaskGroups.Count,
                    taskCount = tasks.Count
                };
                return ActionUtils.Success(result);
            }));
        }
コード例 #6
0
        public ActionResult AddTeamAdmins(string projectSeriesGuid, string userNames)
        {
            return(ActionUtils.Json(() =>
            {
                //判断操作者权限
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                CommUtils.Assert(IsAdmin(projectSeriesLogicModel.Instance, CurrentUserName),
                                 "当前用户[{0}]不是项目[{1}]的创建者/负责人", Platform.UserProfile.GetDisplayRealNameAndUserName(CurrentUserName),
                                 projectSeriesLogicModel.Instance.Name);

                //判断传入userName是否有效
                var userNameList = CommUtils.Split(userNames);
                foreach (var userName in userNameList)
                {
                    CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(userName), "用户[{0}]不存在", userName);
                    CommUtils.Assert(!IsAdmin(projectSeriesLogicModel.Instance, userName),
                                     "用户[{0}]是产品创建者/负责人,无法增加至项目管理员", userName);
                }

                //判断项目管理员是否已经添加
                var project = projectSeriesLogicModel.CurrentProject.Instance;
                var teamAdmins = m_dbAdapter.TeamAdmin.GetByProjectId(project.ProjectId);
                foreach (var teamAdmin in teamAdmins)
                {
                    CommUtils.Assert(!userNameList.Contains(teamAdmin.UserName),
                                     "项目管理员中已经存在用户[{0}]", teamAdmin.UserName);
                }

                var projectActivityLogicModel = projectSeriesLogicModel.CurrentProject.Activity;

                //添加项目管理员
                var teamMemberList = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                var teamMemberDic = teamMemberList.ToDictionary(x => x.UserName);
                var teamMembeUserNames = teamMemberList.Select(x => x.UserName).ToList();
                foreach (var userName in userNameList)
                {
                    var teamAdmin = new TeamAdmin
                    {
                        UserName = userName,
                        ProjectId = project.ProjectId
                    };

                    m_dbAdapter.TeamAdmin.New(teamAdmin);
                    projectActivityLogicModel.Add(project.ProjectId, ActivityObjectType.TeamAdmin, teamAdmin.Guid, "增加项目管理员:" + Platform.UserProfile.Get(teamAdmin.UserName).RealName);

                    if (teamMembeUserNames.Contains(userName))
                    {
                        m_dbAdapter.TeamMember.Remove(teamMemberDic[userName]);
                    }
                }

                var teamMembers = new List <TeamMember>();
                teamAdmins = m_dbAdapter.TeamAdmin.GetByProjectId(project.ProjectId);
                var newTeamAdmins = teamAdmins.Where(x => userNameList.Contains(x.UserName)).ToList();
                var adminUserNames = new List <string>();

                var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeriesLogicModel.Instance);
                permissionLogicModel.AddUserPermissionByProjectSeries(teamMembers, newTeamAdmins, adminUserNames);

                return ActionUtils.Success(1);
            }));
        }
コード例 #7
0
        public ActionResult ModifyProjectSeriesInfo(string projectSeriesGuid, string name, string projectSeriesType, string personInCharge, string createTime, string estimatedFinishTime, string email)
        {
            return(ActionUtils.Json(() =>
            {
                ValidateUtils.Name(name, "项目名称");
                CommUtils.Assert(email.Length <= 38, "名称不能超过38个字符数");
                CommUtils.AssertHasContent(personInCharge, "[项目负责人]不能为空");
                CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(personInCharge), "[用户]不存在");

                CommUtils.AssertHasContent(createTime, "[立项日期]不能为空");
                CommUtils.AssertHasContent(estimatedFinishTime, "[计划完成日期]不能为空");

                var valStartTime = DateTime.Parse(createTime);
                var valEstimatedFinishTime = DateTime.Parse(estimatedFinishTime);
                CommUtils.Assert(valEstimatedFinishTime >= valStartTime, "计划完成日期[{0}]必须大于等于立项日期[{1}]", valEstimatedFinishTime, valStartTime);

                var type = CommUtils.ParseEnum <ProjectSeriesType>(projectSeriesType);
                var projectSeriesLogicModel = new ProjectSeriesLogicModel(CurrentUserName, projectSeriesGuid);
                var projectSeries = projectSeriesLogicModel.Instance;
                var project = projectSeriesLogicModel.CurrentProject.Instance;

                CommUtils.Assert(IsCurrentUser(projectSeries.CreateUserName) ||
                                 IsCurrentUser(projectSeries.PersonInCharge) ||
                                 m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName),
                                 "当前用户[{0}]不是项目[{1}]的管理员/创建者/负责人,无法进行修改", CurrentUserName, projectSeries.Name);

                CommUtils.Assert(!m_dbAdapter.TeamAdmin.IsTeamAdmin(project.ProjectId, CurrentUserName) ||
                                 personInCharge == projectSeries.PersonInCharge,
                                 "当前用户[{0}]是项目[{1}]的管理员,无法修改负责人", CurrentUserName, projectSeries.Name);

                var isAdmin = projectSeries.CreateUserName.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase) ||
                              projectSeries.PersonInCharge.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase); //////////////

                var permissionLogicModel = new PermissionLogicModel(CurrentUserName, projectSeries);
                var teamAdmins = m_dbAdapter.TeamAdmin.GetByProjectId(project.ProjectId);
                var teamMembers = m_dbAdapter.TeamMember.GetByProjectId(project.ProjectId);
                var teamMember = new TeamMember
                {
                    UserName = projectSeries.PersonInCharge,
                    ProjectId = project.ProjectId,
                    Read = true,
                    Write = false,
                    Execute = false
                };



                if (!isAdmin)
                {
                    if (!projectSeries.CreateUserName.Equals(projectSeries.PersonInCharge, StringComparison.CurrentCultureIgnoreCase))
                    {
                        //删除原有负责人的所有权限,将其添加为项目成员
                        permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> {
                            projectSeries.PersonInCharge
                        });
                        m_dbAdapter.TeamMember.Add(teamMember);
                        permissionLogicModel.AddUserPermissionByProjectSeries(new List <TeamMember> {
                            teamMember
                        }, new List <TeamAdmin>(), new List <string>());
                    }

                    foreach (var item in teamMembers)
                    {
                        //如果新的负责人为原有的项目成员,则在项目成员里移除
                        if (item.UserName.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase))
                        {
                            m_dbAdapter.TeamMember.Remove(item);
                            permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> {
                                personInCharge
                            });
                        }
                    }

                    foreach (var item in teamAdmins)
                    {
                        //如果新的负责人为原有的项目管理员,则在项目管理员里移除
                        if (item.UserName.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase))
                        {
                            m_dbAdapter.TeamAdmin.Delete(item);
                            permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> {
                                personInCharge
                            });
                        }
                    }

                    permissionLogicModel.AddUserPermissionByProjectSeries(new List <TeamMember>(), new List <TeamAdmin>(), new List <string> {
                        personInCharge
                    });
                }
                else
                {
                    if (!projectSeries.PersonInCharge.Equals(personInCharge, StringComparison.CurrentCultureIgnoreCase))
                    {
                        //删除原有负责人的所有权限,将其添加为项目成员
                        permissionLogicModel.RemoveUserPermissionByProjectSeries(new List <string> {
                            projectSeries.PersonInCharge
                        });
                        m_dbAdapter.TeamMember.Add(teamMember);
                        permissionLogicModel.AddUserPermissionByProjectSeries(new List <TeamMember> {
                            teamMember
                        }, new List <TeamAdmin>(), new List <string>());
                    }
                }

                //同步产品系列名字与产品名字一致
                if (projectSeries.Name != name)
                {
                    project.Name = name;
                    m_dbAdapter.Project.Update(project);
                }

                projectSeries.Name = name;
                projectSeries.Type = type;
                projectSeries.CreateTime = valStartTime;
                projectSeries.EstimatedFinishTime = valEstimatedFinishTime;
                projectSeries.PersonInCharge = personInCharge;
                projectSeries.Email = email;

                m_dbAdapter.ProjectSeries.UpdateProjectSeries(projectSeries);

                return ActionUtils.Success(1);
            }));
        }
コード例 #8
0
        public ActionResult CreateTask(string projectGuid, string name, string startTime, string endTime,
                                       string prevTaskShortCodes, string taskExtensionType, string taskDetail, string taskTarget,
                                       string taskGroupGuid, string personInCharge)
        {
            return(ActionUtils.Json(() =>
            {
                CheckPermission(PermissionObjectType.TaskGroup, taskGroupGuid, PermissionType.Write);

                CommUtils.Assert(DateUtils.IsNullableDate(startTime), "开始时间必须为[YYYY-MM-DD]格式或者为空");
                ValidateUtils.Name(name, "工作名称");
                CommUtils.AssertHasContent(endTime, "截止时间不能为空");

                CommUtils.Assert(taskTarget.Length <= 100000, "工作目标不能超过100000个字符");
                CommUtils.Assert(taskDetail.Length <= 100000, "工作描述不能超过100000个字符");
                if (!string.IsNullOrWhiteSpace(personInCharge))
                {
                    CommUtils.Assert(m_dbAdapter.Authority.IsUserExist(personInCharge), "负责人[{0}]不存在", personInCharge);
                }
                var taskStartTime = DateUtils.Parse(startTime);
                if (taskStartTime != null)
                {
                    CommUtils.Assert(DateTime.Parse(endTime) >= taskStartTime,
                                     "开始时间[{0}]不能大于截止时间[{1}]", startTime, endTime);
                }

                var project = m_dbAdapter.Project.GetProjectByGuid(projectGuid);
                int?taskGroupId = null;
                if (!string.IsNullOrWhiteSpace(taskGroupGuid))
                {
                    var taskGroup = m_dbAdapter.TaskGroup.GetByGuid(taskGroupGuid);
                    CommUtils.AssertEquals(taskGroup.ProjectId, project.ProjectId, "输入工作组[TaskGroupGuid={0}]和项目[ProjectGuid={1}]不属于同一个项目", taskGroupGuid, project.ProjectGuid);
                    taskGroupId = taskGroup.Id;
                }

                int?taskExId = null;
                if (!string.IsNullOrWhiteSpace(taskExtensionType))
                {
                    var taskExType = CommUtils.ParseEnum <TaskExtensionType>(taskExtensionType);
                    var taskEx = ChineseAbs.ABSManagement.Models.TaskExtension.Create(taskExType);
                    taskEx = m_dbAdapter.Task.NewTaskExtension(taskEx);
                    taskExId = taskEx.TaskExtensionId;
                }

                var task = new Task();
                task.ProjectId = project.ProjectId;
                task.Description = name;
                task.ProjectName = project.Name;
                task.StartTime = taskStartTime;
                task.EndTime = DateTime.Parse(endTime);
                task.TaskExtensionId = taskExId;
                task.PersonInCharge = string.IsNullOrWhiteSpace(personInCharge) ? null : personInCharge;

                if (!string.IsNullOrWhiteSpace(prevTaskShortCodes))
                {
                    var shortCodes = CommUtils.Split(prevTaskShortCodes);
                    var prevTasks = m_dbAdapter.Task.GetTasks(shortCodes);
                    var prevTaskIds = prevTasks.Select(x => x.TaskId.ToString()).ToArray();
                    task.PreTaskIds = CommUtils.Join(prevTaskIds);
                }

                task.TaskDetail = taskDetail;
                task.TaskTarget = taskTarget;
                task.TaskStatus = (DateTime.Today <= task.EndTime) ? TaskStatus.Waitting : TaskStatus.Overdue;
                task.TaskGroupId = taskGroupId;
                task = m_dbAdapter.Task.NewTask(task);

                var projectLogicModel = new ProjectLogicModel(CurrentUserName, project);
                var permissionLogicModel = new PermissionLogicModel(projectLogicModel);
                var projectSeries = m_dbAdapter.ProjectSeries.GetById(project.ProjectSeriesId.Value);
                permissionLogicModel.SetPermission(projectSeries, project, task.ShortCode, PermissionObjectType.Task);

                projectLogicModel.Activity.Add(project.ProjectId, ActivityObjectType.Task, task.ShortCode, "创建工作:" + task.Description);

                var msg = string.Format("创建task:shortCode={0};name={1};startTime={2};endTime={3};taskExtensionType={4};"
                                        + "taskDetail={5};taskTarget={6};prevTaskShortCodes={7};projectGuid={8};taskGroupGuid={9}",
                                        task.ShortCode, name, startTime, endTime, taskExtensionType, taskDetail, taskTarget, prevTaskShortCodes, projectGuid, taskGroupGuid);
                LogEditProduct(EditProductType.CreateTask, task.ProjectId, msg, "");

                return ActionUtils.Success(1);
            }));
        }