Ejemplo n.º 1
0
 public IHttpActionResult EditMultipleProjects(PostEditProjects postEditProjects)
 {
     if (postEditProjects.EditProjects.Count > 0)
     {
         using (TransactionScope tranScope = new TransactionScope())
         {
             var projectId          = postEditProjects.ProjectId;
             var parentCode         = postEditProjects.EditProjects[0].ParentCode;
             var projects           = ProjectInfo.Search(pi => pi.ProjectId == projectId).ToList();
             var usCode             = projects[0].USCode;
             var store              = StoreBasicInfo.GetStorInfo(usCode);
             var minExecuteSequence = postEditProjects.EditProjects.Min(p => p.ExecuteSequence);
             var maxExecuteSequance = postEditProjects.EditProjects.Max(p => p.ExecuteSequence);
             foreach (TopNavigator nav in postEditProjects.EditProjects)
             {
                 var workflow = BaseWFEntity.GetWorkflowEntity(postEditProjects.ProjectId, nav.Code);
                 workflow.Edit();
             }
             string[] cancelWorkflowCodes = FlowInfo.Search(f => f.ParentCode == parentCode && f.ExecuteSequence <= maxExecuteSequance + 1).Select(f => f.Code).ToArray();
             TaskWork.Cancel(t => cancelWorkflowCodes.Contains(t.TypeCode) && t.RefID == postEditProjects.ProjectId && t.Status != TaskWorkStatus.Finished);
             postEditProjects.EditProjects.Where(n => n.ExecuteSequence == minExecuteSequence).ToList().ForEach(n =>
             {
                 var project            = projects.FirstOrDefault(pi => pi.FlowCode == n.Code);
                 var originator         = Employee.GetSimpleEmployeeByCode(project.CreateUserAccount);
                 var source             = FlowInfo.Get(n.ParentCode);
                 var taskType           = FlowInfo.Get(n.Code);
                 TaskWork task          = new TaskWork();
                 task.Id                = Guid.NewGuid();
                 task.SourceCode        = source.Code;
                 task.SourceNameENUS    = source.NameENUS;
                 task.SourceNameZHCN    = source.NameZHCN;
                 task.Status            = TaskWorkStatus.UnFinish;
                 task.StatusNameZHCN    = "任务";
                 task.StatusNameENUS    = "任务";
                 task.Title             = TaskWork.BuildTitle(postEditProjects.ProjectId, store.NameZHCN, store.NameENUS);
                 task.RefID             = postEditProjects.ProjectId;
                 task.StoreCode         = usCode;
                 task.ReceiverAccount   = originator.Code;
                 task.ReceiverNameENUS  = originator.NameENUS;
                 task.ReceiverNameZHCN  = originator.NameZHCN;
                 task.TypeCode          = taskType.Code;
                 task.TypeNameENUS      = taskType.NameENUS;
                 task.TypeNameZHCN      = taskType.NameZHCN;
                 task.Url               = TaskWork.BuildUrl(n.Code, projectId, "");
                 task.CreateTime        = DateTime.Now;
                 task.CreateUserAccount = ClientCookie.UserCode;
                 task.Sequence          = 0;
                 task.ActivityName      = "Start";
                 task.Add();
             });
             tranScope.Complete();
         }
         return(Ok());
     }
     else
     {
         return(BadRequest("you must select projects to be edited!"));
     }
 }
Ejemplo n.º 2
0
        public IHttpActionResult GetNodes(string projectId, string flowCode)
        {
            var tasks    = TaskWork.Search(t => t.ReceiverAccount == ClientCookie.UserCode && t.RefID == projectId && t.Status == 0).ToList();
            var isActor  = ProjectUsers.IsRole(projectId, ClientCookie.UserCode, ProjectUserRoleCode.AssetActor);
            var projects = ProjectInfo.Search(p => p.ProjectId == projectId);
            var flows    = FlowInfo.Search(f => f.ParentCode == flowCode).OrderBy(f => f.LayoutSequence).ToList();

            var editApproverableCodes = new string[] {
                FlowCode.Closure_ClosurePackage,
                FlowCode.TempClosure_ClosurePackage,
                FlowCode.MajorLease_Package,
                FlowCode.Reimage_Package,
                FlowCode.Rebuild_Package,
                FlowCode.Renewal_Package
            };

            var navs = flows.Select(f =>
            {
                var task            = tasks.FirstOrDefault(t => t.TypeCode == f.Code);
                var project         = projects.FirstOrDefault(p => p.FlowCode == f.Code);
                var node            = NodeInfo.FirstOrDefault(n => n.Code == project.NodeCode);
                var nextFlow        = flows.FirstOrDefault(nf => nf.ExecuteSequence == f.ExecuteSequence + 1);
                var isOriginator    = ProjectInfo.IsOriginator(projectId, f.Code, ClientCookie.UserCode);
                var canEdit         = project.Status == ProjectStatus.Finished || project.Status == ProjectStatus.Rejected;
                var flowStarted     = node.Code != NodeCode.Start;
                var lastStartTask   = TaskWork.Search(t => t.RefID == projectId && t.TypeCode == f.Code && (t.ActivityName == "Start" || t.ActivityName == "Originator")).OrderByDescending(t => t.CreateTime).FirstOrDefault();
                var nextFlowStarted = nextFlow != null && projects.Any(p => p.FlowCode == nextFlow.Code && p.NodeCode != NodeCode.Start);
                var nav             = new TopNavigator();
                nav.Code            = f.Code;
                nav.ParentCode      = f.ParentCode;
                nav.NameENUS        = f.NameENUS;
                nav.NameZHCN        = f.NameZHCN;
                nav.ExecuteSequence = f.ExecuteSequence;
                nav.Percentage      = f.Percentage;
                nav.IsFinished      = project.Status == ProjectStatus.Finished;
                nav.Status          = project.Status;
                nav.IsRejected      = project.Status == ProjectStatus.Rejected;
                nav.ProgressRate    = node.ProgressRate;
                if (task != null)
                {
                    if (task.Url.IndexOf(task.RefID, StringComparison.OrdinalIgnoreCase) < 0)
                    {
                        if (task.Url.IndexOf("?") >= 0)
                        {
                            task.Url += "&";
                        }
                        else
                        {
                            task.Url += "?";
                        }
                        task.Url += "projectId=" + task.RefID;
                    }
                    nav.Url = task.Url;
                }
                else if (f.NoTaskEditable && isActor)
                {
                    nav.Url = string.Format("/{0}/Main#/{1}?projectId={2}", flowCode, f.Code.Split('_')[1], projectId);
                }
                else
                {
                    var tmpCode = f.Code.Split('_')[1];
                    if (flowCode == "Rebuild" && tmpCode == "Package")
                    {
                        tmpCode = "RebuildPackage";
                    }
                    nav.Url = string.Format("/{0}/Main#/{1}/Process/View?projectId={2}", flowCode, tmpCode, projectId);
                }
                if (projectId.ToLower().IndexOf("renewal") != -1)
                {
                    nav.Editable = f.Editable && canEdit && !nextFlowStarted && ProjectInfo.IsFlowEditable(projectId, f.Code);
                }
                else
                {
                    nav.Editable = f.Editable && canEdit && ProjectInfo.IsFlowEditable(projectId, f.Code);
                }
                nav.Recallable       = f.Recallable && !canEdit && isOriginator && ((lastStartTask == null && TaskWork.Any(t => t.RefID == projectId && t.TypeCode == f.Code && t.ActivityName != "Start")) || (lastStartTask != null && TaskWork.Any(t => t.CreateTime >= lastStartTask.CreateTime && t.RefID == projectId && t.TypeCode == f.Code && t.ActivityName != "Start"))) && project.NodeCode != NodeCode.Start;
                nav.EditApproverable = !canEdit && isOriginator && editApproverableCodes.Contains(nav.Code) && ((lastStartTask == null && TaskWork.Any(t => t.RefID == projectId && t.TypeCode == f.Code && (t.ActivityName != "Start" && t.ActivityName != "Originator"))) || (lastStartTask != null && TaskWork.Any(t => t.CreateTime >= lastStartTask.CreateTime && t.RefID == projectId && t.TypeCode == f.Code && (t.ActivityName != "Start" && t.ActivityName != "Originator"))));
                return(nav);
            }).ToList();

            return(Ok(navs));
        }
Ejemplo n.º 3
0
        public IHttpActionResult TopNav(string projectId, string flowCode, string subCode)
        {
            var tasks    = TaskWork.Search(t => t.ReceiverAccount == ClientCookie.UserCode && t.RefID == projectId && t.Status == 0).ToList();
            var projects = ProjectInfo.Search(p => p.ProjectId == projectId);
            var navs     = FlowInfo.Search(f => f.ParentCode == flowCode).OrderBy(f => f.LayoutSequence).ToList().Select(f =>
            {
                var task    = tasks.FirstOrDefault(t => t.TypeCode == f.Code);
                var project = projects.FirstOrDefault(p => p.FlowCode == f.Code) ?? new ProjectInfo();
                var nav     = new TopNavigator();
                if (f.Code == subCode)
                {
                    nav.IsSelected = true;
                }
                else
                {
                    nav.IsSelected = false;
                }
                nav.Code            = f.Code;
                nav.ParentCode      = f.ParentCode;
                nav.NameENUS        = f.NameENUS;
                nav.NameZHCN        = f.NameZHCN;
                nav.ExecuteSequence = f.ExecuteSequence;
                nav.Percentage      = f.Percentage;
                nav.IsFinished      = project.Status == ProjectStatus.Finished;
                nav.Status          = project.Status;
                nav.IsRejected      = project.Status == ProjectStatus.Rejected;
                if (task != null)
                {
                    if (task.Url.IndexOf(task.RefID, StringComparison.OrdinalIgnoreCase) < 0)
                    {
                        if (task.Url.IndexOf("?") >= 0)
                        {
                            task.Url += "&";
                        }
                        else
                        {
                            task.Url += "?";
                        }
                        task.Url += "projectId=" + task.RefID;
                    }
                    nav.Url = task.Url;
                }
                else if (f.NoTaskEditable && project.CreateUserAccount == ClientCookie.UserCode)
                {
                    nav.Url = string.Format("/{0}/Main#/{1}?projectId={2}", flowCode, f.Code.Split('_')[1], projectId);
                }
                else
                {
                    var tmpCode = f.Code.Split('_')[1];
                    if (flowCode == "Rebuild" && tmpCode == "Package")
                    {
                        tmpCode = "RebuildPackage";
                    }
                    nav.Url = string.Format("/{0}/Main#/{1}/Process/View?projectId={2}", flowCode, tmpCode, projectId);
                }
                return(nav);
            }).ToList();

            navs.Insert(0, new TopNavigator
            {
                NameENUS   = "Project Detail",
                NameZHCN   = "Project Detail",
                Code       = "Detail",
                Url        = "/Home/Main#/project/detail/" + projectId + "?flowCode=" + flowCode,
                IsSelected = subCode == "Detail"
            });
            return(Ok(navs));
        }
Ejemplo n.º 4
0
        public List <NavigateInfo> GetCurrentByProjectId(string projectId, string flowCode, string subFlowCode, string userAccount)
        {
            var flowList = FlowInfo.Search(e => e.ParentCode == FlowCode.Closure).OrderBy(e => e.LayoutSequence);

            //获取当前用户的项目任务
            var sql = string.Format(@"SELECT tb_users.*,tb_work.Status AS TaskStatus,tb_work.TypeCode,tb_work.Url,
            tb_work.ProcInstID,tb_users.ProjectId
            FROM dbo.ProjectUsers tb_users
            RIGHT JOIN dbo.TaskWork tb_work
            ON tb_users.UserAccount = tb_work.ReceiverAccount
            AND tb_work.RefID = tb_users.ProjectId
            WHERE tb_work.RefID = '{0}' AND tb_work.ReceiverAccount ='{1}'
            AND ISNULL(RoleCode,'')!='View' AND tb_work.Status = 0  ", projectId, userAccount);

            var navigateList = new List <NavigateInfo>();

            var result = ProjectUsers.SqlQuery <ProjectUsersEntity>(sql, null);
            var list   = result.ToList();



            //获取已完成的项目列表
            var finishedProjectList = ProjectInfo.Search(e => e.ProjectId == projectId && e.Status == ProjectStatus.Finished).ToList();

            NavigateInfo navigateItem  = null;
            var          viewPageStuff = "/View/param?projectId=" + projectId;
            var          editPageStuff = "/" + projectId;

            //是否是编辑页

            foreach (var flowItem in flowList)
            {
                var isEditPage = false;
                navigateItem          = new NavigateInfo();
                navigateItem.NameZHCN = flowItem.NameZHCN;
                navigateItem.Linked   = true;
                navigateItem.Code     = flowItem.Code;
                navigateItem.Href     = string.Empty;

                //设置当前的子流程的为选中状态
                if (flowItem.Code == subFlowCode)
                {
                    navigateItem.IsSelected = true;
                }

                //设置流程的完成状态
                foreach (var project in finishedProjectList)
                {
                    if (flowItem.Code == project.FlowCode)
                    {
                        navigateItem.IsFinished = true;
                    }
                }


                //默认的链接 主流程Code+/+子流程Code
                string defaultUrl = "#/" + flowItem.FlowCodePrefix + "/" + flowItem.Code.Split('_')[1];

                //判断当前用户是否有待办任务
                foreach (var item in list)
                {
                    if (item.TypeCode == flowItem.Code)
                    {
                        if (item.TaskStatus == TaskWorkStatus.UnFinish)
                        {
                            //如果有待办任务导航tab的链接为待办任务的链接
                            navigateItem.Href = item.Url;
                            if (item.ProcInstID.HasValue && !string.IsNullOrEmpty(item.ProjectId))
                            {
                                navigateItem.Href += "&projectId=" + item.ProjectId;
                            }
                        }
                        //如果任务已结束设置为只读页面的链接
                        else if (item.TaskStatus == TaskWorkStatus.Finished ||
                                 item.TaskStatus == TaskWorkStatus.K2ProcessApproved || navigateItem.IsFinished)
                        {
                            navigateItem.Href = defaultUrl + viewPageStuff;
                        }
                    }
                }


                //获取当前用户的项目组头衔

                var projectUser = ProjectUsers.Get(ClientCookie.UserCode, projectId);

                if (string.IsNullOrEmpty(navigateItem.Href))
                {
                    if (projectUser != null)
                    {
                        if (!string.IsNullOrEmpty(flowItem.RoleCode) &&
                            flowItem.RoleCode.Split('_').Contains(projectUser.RoleCode) && !navigateItem.IsFinished)
                        {
                            isEditPage = true;
                        }

                        if (isEditPage)
                        {
                            navigateItem.Href = defaultUrl + editPageStuff;
                        }
                        else
                        {
                            navigateItem.Href = defaultUrl + viewPageStuff;
                        }
                    }
                    else
                    {
                        navigateItem.Href = defaultUrl + viewPageStuff;
                    }
                }


                navigateList.Add(navigateItem);
            }


            return(navigateList);
        }