コード例 #1
0
        public object PostAddEditUserTask(PostAddEditUserTaskDTO userTaskDTO)
        {
            using (ProcessService processService = new ProcessService())
            {
                if (!processService.GetInfo(userTaskDTO.ProcessID).AllowEdit())
                {
                    return(new PostMethodMessage(LangUtility.Get("NotAllowEdit.Text", nameof(sysBpmsProcess)), DisplayMessageType.error));
                }
            }
            ResultOperation resultOperation = new ResultOperation();

            using (TaskService taskService = new TaskService())
            {
                //save access
                sysBpmsTask       task = taskService.GetInfo(userTaskDTO.ID);
                UserTaskRuleModel userTaskRuleModel = new UserTaskRuleModel();
                if (userTaskDTO.OwnerTypeLU.HasValue)
                {
                    switch ((sysBpmsTask.e_OwnerTypeLU)userTaskDTO.OwnerTypeLU)
                    {
                    case sysBpmsTask.e_OwnerTypeLU.User:
                        userTaskRuleModel.AccessType = userTaskDTO.UserAccessType.ToIntObj();
                        switch ((UserTaskRuleModel.e_UserAccessType)userTaskDTO.UserAccessType)
                        {
                        case UserTaskRuleModel.e_UserAccessType.Static:
                            //userTaskDTO.UserID is filled automativally
                            break;

                        case UserTaskRuleModel.e_UserAccessType.Variable:
                            userTaskRuleModel.Variable = userTaskDTO.ddlUserVariable;
                            break;
                        }

                        break;

                    case sysBpmsTask.e_OwnerTypeLU.Role:
                        userTaskRuleModel.AccessType = userTaskDTO.RoleAccessType.ToIntObj();
                        switch ((UserTaskRuleModel.e_RoleAccessType)userTaskDTO.RoleAccessType)
                        {
                        case UserTaskRuleModel.e_RoleAccessType.Static:
                            //userTaskRuleModel.RoleCode = Request.Form["RoleName"];
                            userTaskRuleModel.SpecificDepartmentId = userTaskDTO.SpecificDepartmentID;
                            break;

                        case UserTaskRuleModel.e_RoleAccessType.Variable:
                            userTaskRuleModel.Variable             = userTaskDTO.ddlRoleVariable;
                            userTaskRuleModel.SpecificDepartmentId = userTaskDTO.SpecificDepartmentID;
                            break;

                        case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:
                            userTaskRuleModel.RoleCode       = userTaskDTO.ddlRoleRuleRoleName;
                            userTaskRuleModel.UserType       = userTaskDTO.ddlRoleRuleUserType;
                            userTaskRuleModel.GoUpDepartment = userTaskDTO.GoUpDepartment;
                            break;
                        }
                        break;
                    }

                    userTaskDTO.Rule = userTaskRuleModel.BuildXml();
                    resultOperation  = task.Update(userTaskDTO.RoleName, userTaskDTO.SpecificDepartmentID, userTaskDTO.OwnerTypeLU, userTaskDTO.UserID, userTaskDTO.Rule);
                    if (!resultOperation.IsSuccess)
                    {
                        return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                    }
                }
                resultOperation = taskService.Update(task);

                //save step
                int index = 0;
                userTaskDTO.ListSteps = userTaskDTO.ListSteps ?? new List <StepDTO>();
                userTaskDTO.ListSteps.ForEach(c => { c.Position = ++index; });

                using (StepService stepService = new StepService())
                {
                    List <sysBpmsStep> CurrentSteps = stepService.GetList(userTaskDTO.ID, null);
                    foreach (sysBpmsStep item in CurrentSteps.Where(c => !userTaskDTO.ListSteps.Any(d => d.ID == c.ID)))
                    {
                        resultOperation = stepService.Delete(item.ID);
                        if (!resultOperation.IsSuccess)
                        {
                            return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                        }
                    }
                    foreach (StepDTO item in userTaskDTO.ListSteps)
                    {
                        resultOperation = null;
                        if (item.ID != Guid.Empty)
                        {
                            resultOperation = stepService.Update(new sysBpmsStep(item.ID, item.TaskID, item.Position, item.DynamicFormID, item.Name));
                        }
                        else
                        {
                            resultOperation = stepService.Add(new sysBpmsStep(item.ID, item.TaskID, item.Position, item.DynamicFormID, item.Name));
                        }

                        if (!resultOperation.IsSuccess)
                        {
                            return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                        }
                    }

                    if (resultOperation.IsSuccess)
                    {
                        return(new PostMethodMessage(SharedLang.Get("Success.Text"), DisplayMessageType.success));
                    }
                    else
                    {
                        return(new PostMethodMessage(resultOperation.GetErrors(), DisplayMessageType.error));
                    }
                }
            }
        }