Ejemplo n.º 1
0
 public void Delete(Guid id)
 {
     Domain.sysBpmsTask Task = this.Context.sysBpmsTasks.FirstOrDefault(d => d.ID == id);
     if (Task != null)
     {
         this.Context.sysBpmsTasks.Remove(Task);
     }
 }
Ejemplo n.º 2
0
        public void Update(Domain.sysBpmsTask task)
        {
            //To fix 'Attaching an entity failed' error.
            var local = this.Context.Set <sysBpmsTask>().Local.FirstOrDefault(f => f.ID == task.ID);

            if (local != null)
            {
                this.Context.Entry(local).State = EntityState.Detached;
                local = null;
            }
            this.Context.Entry(task).State = EntityState.Modified;
        }
Ejemplo n.º 3
0
 public bool CheckAccessByThreadTask(Domain.sysBpmsTask task, sysBpmsThreadTask threadTask, Guid?userID, List <sysBpmsDepartmentMember> list = null)
 {
     list = list ?? (userID.HasValue ? new DepartmentMemberService().GetList(null, null, userID) : new List <sysBpmsDepartmentMember>());
     if (!string.IsNullOrWhiteSpace(threadTask.OwnerRole))
     {
         return((
                    !threadTask.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester) ||
                    base.EngineSharedModel.CurrentThread == null ||
                    (base.EngineSharedModel.CurrentThread?.UserID ?? Guid.Empty) == userID)
                &&
                list.Any(c => (string.IsNullOrWhiteSpace(threadTask.OwnerRole) || threadTask.IsInRole(c.DepartmentID, c.RoleLU))));
     }
     else
     {
         return(threadTask.OwnerUserID == userID);
     }
 }
        public ResultOperation Update(Domain.sysBpmsTask Task)
        {
            ResultOperation resultOperation = new ResultOperation();

            if (resultOperation.IsSuccess)
            {
                if (string.IsNullOrEmpty(Task.RoleName))
                {
                    Task.RoleName = string.Empty;
                }
                else
                {
                    Task.RoleName = "," + Task.RoleName.Trim(',') + ",";
                }

                this.UnitOfWork.Repository <ITaskRepository>().Update(Task);
                this.UnitOfWork.Save();
            }
            return(resultOperation);
        }
        private ResultOperation UpdateTask(Domain.sysBpmsTask task, string name, Domain.sysBpmsTask.e_MarkerTypeLU?markerTypeLU)
        {
            ResultOperation resultOperation = new ResultOperation();

            //if task.MarkerTypeLU was changed, it updates task.
            if (task.MarkerTypeLU != (markerTypeLU.HasValue ? (int)markerTypeLU : (int?)null))
            {
                task.MarkerTypeLU = markerTypeLU.HasValue ? (int)markerTypeLU : (int?)null;
                resultOperation   = this.Update(task);
                if (!resultOperation.IsSuccess)
                {
                    return(resultOperation);
                }
            }
            //if Element.Name was changed, it updates Element.
            if (task.Element.Name != name)
            {
                task.Element.Name = name;
                resultOperation   = new ElementService(this.UnitOfWork).Update(task.Element);
            }
            return(resultOperation);
        }
Ejemplo n.º 6
0
        public bool CheckUserAccess(Domain.sysBpmsTask task, Guid?userID, List <sysBpmsDepartmentMember> list)
        {
            switch ((Domain.sysBpmsTask.e_OwnerTypeLU)task.OwnerTypeLU.Value)
            {
            case Domain.sysBpmsTask.e_OwnerTypeLU.Role:
                switch ((UserTaskRuleModel.e_RoleAccessType)task.UserTaskRuleModel.AccessType)
                {
                case UserTaskRuleModel.e_RoleAccessType.Static:
                case UserTaskRuleModel.e_RoleAccessType.Variable:
                    if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_RoleAccessType.Variable)
                    {
                        task.SetRoleDepartment(new DataManageEngine(base.EngineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj(), task.UserTaskRuleModel.SpecificDepartmentId);
                    }
                    return
                        ((!task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester) || base.EngineSharedModel.CurrentThread == null || (base.EngineSharedModel.CurrentThread?.UserID ?? Guid.Empty) == userID)
                         &&
                         list.Any(c => task.RoleName == string.Empty || task.IsInRole(c.DepartmentID, c.RoleLU)));

                case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:
                    Guid?departmentId = new AccessCodeHelper(base.UnitOfWork).GetDepartmentHierarchyByUserId(userID.ToGuidObj(), task.UserTaskRuleModel.RoleCode.ToIntObj(), task.UserTaskRuleModel.GoUpDepartment);
                    return(departmentId.HasValue && list.Any(f => f.DepartmentID == departmentId && f.RoleLU == task.UserTaskRuleModel.RoleCode.ToIntObj()));
                }
                break;

            case Domain.sysBpmsTask.e_OwnerTypeLU.User:
                switch ((UserTaskRuleModel.e_UserAccessType)task.UserTaskRuleModel.AccessType)
                {
                case UserTaskRuleModel.e_UserAccessType.Static:
                    return(task.UserID.ToStringObj().Contains(userID.ToStringObj()));

                case UserTaskRuleModel.e_UserAccessType.Variable:
                    return(new DataManageEngine(base.EngineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj().Contains(userID.ToStringObj()));
                }
                break;
            }
            return(true);
        }
Ejemplo n.º 7
0
 public void Add(Domain.sysBpmsTask Task)
 {
     this.Context.sysBpmsTasks.Add(Task);
 }
        public void SetAccessInfoTo(sysBpmsThreadTask threadTask, Domain.sysBpmsTask task, EngineSharedModel engineSharedModel)
        {
            if (task.OwnerTypeLU.HasValue)
            {
                switch ((sysBpmsTask.e_OwnerTypeLU)task.OwnerTypeLU)
                {
                case sysBpmsTask.e_OwnerTypeLU.User:
                    switch ((UserTaskRuleModel.e_UserAccessType)task.UserTaskRuleModel.AccessType)
                    {
                    case UserTaskRuleModel.e_UserAccessType.Static:
                        threadTask.UpdateAccessInfo(task.UserID.ToGuidObj(), null);
                        break;

                    case UserTaskRuleModel.e_UserAccessType.Variable:
                        Guid?variableUserID = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToGuidObjNull();
                        if (!variableUserID.HasValue)
                        {
                            throw new Exception(LangUtility.Get("UserNotFound.Text", nameof(sysBpmsThreadTask)));
                        }

                        threadTask.UpdateAccessInfo(variableUserID, null);
                        break;
                    }
                    break;

                case sysBpmsTask.e_OwnerTypeLU.Role:
                    switch ((UserTaskRuleModel.e_RoleAccessType)task.UserTaskRuleModel.AccessType)
                    {
                    case UserTaskRuleModel.e_RoleAccessType.Static:
                        //if this userTask must be seen by requester user, this add thread userId to new threadTask
                        if (task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester))
                        {
                            threadTask.UpdateAccessInfo(engineSharedModel.CurrentThread?.UserID, null);
                        }
                        else
                        {
                            threadTask.UpdateAccessInfo(null, task.GetDepartmentRoles);
                        }
                        break;

                    case UserTaskRuleModel.e_RoleAccessType.Variable:
                        string roleName = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj();
                        if (string.IsNullOrWhiteSpace(roleName))
                        {
                            throw new Exception(LangUtility.Get("RoleNotFound.Text", nameof(sysBpmsThreadTask)));
                        }

                        task.SetRoleDepartment(roleName, task.UserTaskRuleModel.SpecificDepartmentId);
                        //if this userTask must be seen by requester user, this add thread userId to new threadTask
                        if (task.IsInRole(null, (int)sysBpmsDepartmentMember.e_RoleLU.Requester))
                        {
                            threadTask.UpdateAccessInfo(engineSharedModel.CurrentThread?.UserID, null);
                        }
                        else
                        {
                            threadTask.UpdateAccessInfo(null, task.GetDepartmentRoles);
                        }
                        break;

                    case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:
                        Guid?userId       = task.UserTaskRuleModel.UserType == (int)UserTaskRuleModel.e_UserType.CurrentUserID ? new UserService(base.UnitOfWork).GetInfo(engineSharedModel.CurrentUserName ?? "")?.ID : engineSharedModel.CurrentThread?.UserID;
                        Guid?departmentId = new AccessCodeHelper(base.UnitOfWork).GetDepartmentHierarchyByUserId(userId.ToGuidObj(), task.UserTaskRuleModel.RoleCode.ToIntObj(), task.UserTaskRuleModel.GoUpDepartment);
                        if (!departmentId.HasValue)
                        {
                            throw new Exception(LangUtility.Get("OrganizationNotFound.Text", nameof(sysBpmsThreadTask)));
                        }

                        threadTask.UpdateAccessInfo(null, new List <Tuple <Guid?, string> >()
                        {
                            new Tuple <Guid?, string>(departmentId, task.UserTaskRuleModel.RoleCode)
                        });
                        break;
                    }
                    break;
                }
            }
            else
            {
                throw new Exception(LangUtility.Get("NextNoAccessSetting.Text", nameof(sysBpmsThreadTask)));
            }
        }
        public List <sysBpmsThreadTask> GetMultiInstanceTask(Domain.sysBpmsTask task, EngineSharedModel engineSharedModel)
        {
            sysBpmsThreadTask        threadTask = null;
            List <sysBpmsThreadTask> list       = new List <sysBpmsThreadTask>();

            switch ((sysBpmsTask.e_OwnerTypeLU)task.OwnerTypeLU)
            {
            case sysBpmsTask.e_OwnerTypeLU.User:
                switch ((UserTaskRuleModel.e_UserAccessType)task.UserTaskRuleModel.AccessType)
                {
                case UserTaskRuleModel.e_UserAccessType.Static:
                case UserTaskRuleModel.e_UserAccessType.Variable:
                    string userId = task.UserID;
                    if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_UserAccessType.Variable)
                    {
                        userId = new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj();
                    }
                    int i = 0;
                    foreach (string item in userId.Split(','))
                    {
                        threadTask = new sysBpmsThreadTask();
                        threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New);
                        threadTask.UpdateAccessInfo(item.ToGuidObj(), null);
                        list.Add(threadTask);
                    }
                    break;
                }
                break;

            case sysBpmsTask.e_OwnerTypeLU.Role:
                switch ((UserTaskRuleModel.e_RoleAccessType)task.UserTaskRuleModel.AccessType)
                {
                case UserTaskRuleModel.e_RoleAccessType.Static:
                case UserTaskRuleModel.e_RoleAccessType.Variable:
                    if (task.UserTaskRuleModel.AccessType == (int)UserTaskRuleModel.e_RoleAccessType.Variable)
                    {
                        task.SetRoleDepartment(new DataManageEngine(engineSharedModel, base.UnitOfWork).GetValueByBinding(task.UserTaskRuleModel.Variable).ToStringObj(), task.UserTaskRuleModel.SpecificDepartmentId);
                    }
                    foreach (var item in task.GetDepartmentRoles)
                    {
                        List <Guid> users = new DepartmentMemberService(base.UnitOfWork).GetList(item.Item1, item.Item2.ToIntObj(), null).Select(c => c.UserID).ToList();
                        //It is used  for sequential task.
                        int i = 0;
                        foreach (Guid uId in users)
                        {
                            threadTask = new sysBpmsThreadTask();
                            threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New);
                            threadTask.UpdateAccessInfo(uId, null);
                            list.Add(threadTask);
                        }
                    }
                    break;

                case UserTaskRuleModel.e_RoleAccessType.CorrespondentRole:

                    Guid?userId       = task.UserTaskRuleModel.UserType == (int)UserTaskRuleModel.e_UserType.CurrentUserID ? new UserService(base.UnitOfWork).GetInfo(engineSharedModel.CurrentUserName ?? "")?.ID : engineSharedModel.CurrentThread?.UserID;
                    Guid?departmentId = new AccessCodeHelper(base.UnitOfWork).GetDepartmentHierarchyByUserId(userId.ToGuidObj(), task.UserTaskRuleModel.RoleCode.ToIntObj(), task.UserTaskRuleModel.GoUpDepartment);
                    if (!departmentId.HasValue)
                    {
                        throw new Exception(LangUtility.Get("OrganizationNotFound.Text", nameof(sysBpmsThreadTask)));
                    }
                    {
                        List <Guid> users = new DepartmentMemberService(base.UnitOfWork).GetList(departmentId, task.UserTaskRuleModel.RoleCode.ToIntObj(), null).Select(c => c.UserID).ToList();
                        //It is used  for sequential task.
                        int i = 0;
                        foreach (Guid uId in users)
                        {
                            threadTask = new sysBpmsThreadTask();
                            threadTask.Update(engineSharedModel.CurrentThreadID.Value, task.ID, DateTime.Now.AddSeconds(i++), null, string.Empty, 0, (int)sysBpmsThreadTask.e_StatusLU.New);
                            threadTask.UpdateAccessInfo(uId, null);
                            list.Add(threadTask);
                        }
                    }
                    break;
                }

                break;
            }
            return(list);
        }
Ejemplo n.º 10
0
        public ResultOperation Update(Guid processID, WorkflowProcess _WorkflowProcess)
        {
            ResultOperation resultOperation = new ResultOperation();

            try
            {
                List <Domain.sysBpmsTask> tasks = this.GetList(null, processID);
                List <Guid> listDeleted         = new List <Guid>();
                //delete userTask
                foreach (Domain.sysBpmsTask item in tasks.Where(c => c.TypeLU == (int)Domain.sysBpmsTask.e_TypeLU.UserTask && !_WorkflowProcess.UserTasks.Any(d => d.ID == c.ElementID)))
                {
                    resultOperation = this.Delete(item.ID);
                    listDeleted.Add(item.ID);
                    if (!resultOperation.IsSuccess)
                    {
                        return(resultOperation);
                    }
                }

                //delete serviceTask
                foreach (Domain.sysBpmsTask item in tasks.Where(c => c.TypeLU == (int)Domain.sysBpmsTask.e_TypeLU.ServiceTask && !_WorkflowProcess.ServiceTasks.Any(d => d.ID == c.ElementID)))
                {
                    resultOperation = this.Delete(item.ID);
                    listDeleted.Add(item.ID);
                    if (!resultOperation.IsSuccess)
                    {
                        return(resultOperation);
                    }
                }

                //delete scriptTask
                foreach (Domain.sysBpmsTask item in tasks.Where(c => c.TypeLU == (int)Domain.sysBpmsTask.e_TypeLU.ScriptTask && !_WorkflowProcess.ScriptTasks.Any(d => d.ID == c.ElementID)))
                {
                    resultOperation = this.Delete(item.ID);
                    listDeleted.Add(item.ID);
                    if (!resultOperation.IsSuccess)
                    {
                        return(resultOperation);
                    }
                }

                //delete task
                foreach (Domain.sysBpmsTask item in tasks.Where(c => c.TypeLU == (int)Domain.sysBpmsTask.e_TypeLU.Task && !_WorkflowProcess.Tasks.Any(d => d.ID == c.ElementID)))
                {
                    resultOperation = this.Delete(item.ID);
                    listDeleted.Add(item.ID);
                    if (!resultOperation.IsSuccess)
                    {
                        return(resultOperation);
                    }
                }
                tasks = tasks.Where(c => !listDeleted.Contains(c.ID)).ToList();
                //userTask
                foreach (WorkflowUserTask item in _WorkflowProcess.UserTasks)
                {
                    Domain.sysBpmsTask task = tasks.FirstOrDefault(c => c.ElementID == item.ID);
                    if (task != null)
                    {
                        resultOperation = this.UpdateTask(task, item.Name, item.MarkerTypeLU);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                    else
                    {
                        task            = this.InitTask(Domain.sysBpmsTask.e_TypeLU.UserTask, item.ID, item.MarkerTypeLU, item.Name, processID);
                        resultOperation = this.Add(task);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                        new ElementService(this.UnitOfWork).Update(task.Element);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                }

                //serviceTask
                foreach (WorkflowServiceTask item in _WorkflowProcess.ServiceTasks)
                {
                    Domain.sysBpmsTask task = tasks.FirstOrDefault(c => c.ElementID == item.ID);
                    if (task != null)
                    {
                        resultOperation = this.UpdateTask(task, item.Name, item.MarkerTypeLU);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                    else
                    {
                        task            = this.InitTask(Domain.sysBpmsTask.e_TypeLU.ServiceTask, item.ID, item.MarkerTypeLU, item.Name, processID);
                        resultOperation = this.Add(task);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                        new ElementService(this.UnitOfWork).Update(task.Element);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                }

                //scriptTask
                foreach (WorkflowScriptTask item in _WorkflowProcess.ScriptTasks)
                {
                    Domain.sysBpmsTask _Task = tasks.FirstOrDefault(c => c.ElementID == item.ID);
                    if (_Task != null)
                    {
                        resultOperation = this.UpdateTask(_Task, item.Name, item.MarkerTypeLU);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                    else
                    {
                        _Task           = this.InitTask(Domain.sysBpmsTask.e_TypeLU.ScriptTask, item.ID, item.MarkerTypeLU, item.Name, processID);
                        resultOperation = this.Add(_Task);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                        new ElementService(this.UnitOfWork).Update(_Task.Element);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                }

                //Task
                foreach (WorkflowTask item in _WorkflowProcess.Tasks)
                {
                    Domain.sysBpmsTask _Task = tasks.FirstOrDefault(c => c.ElementID == item.ID);
                    if (_Task != null)
                    {
                        resultOperation = this.UpdateTask(_Task, item.Name, item.MarkerTypeLU);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                    else
                    {
                        _Task           = this.InitTask(Domain.sysBpmsTask.e_TypeLU.Task, item.ID, item.MarkerTypeLU, item.Name, processID);
                        resultOperation = this.Add(_Task);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                        new ElementService(this.UnitOfWork).Update(_Task.Element);
                        if (!resultOperation.IsSuccess)
                        {
                            return(resultOperation);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                return(base.ExceptionHandler(ex));
            }
            if (resultOperation.IsSuccess)
            {
                this.UnitOfWork.Save();
            }
            base.FinalizeService(resultOperation);

            return(resultOperation);
        }