Ejemplo n.º 1
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);
        }