public List <Review> GetApproveDetails(string UserId, string ProsIncId, string SN, string SUser) { List <Review> WorkListItem = new List <Review>(); try { WorkflowFacade workfacade = new WorkflowFacade(); List <WorklistItem> worklist = workfacade.GetWorklistItemForTaskDetail(UserId); //List<WorklistItem> worklist = workfacade.GeWorklistItemsByProcessAction(UserId, "Approval"); //worklist.AddRange(workfacade.GeWorklistItemsByProcessAction(UserId, "ITSApproval")); if (worklist.Where(P => P.SN == SN).Count() > 0) { //string ReferID = Db.RequestFormMasters.Where(P => P.ProcInstID == ProsIncId).Select(P => P.ReferenceID).FirstOrDefault().ToString(); string ReferID = (from a in Db.RequestFormMasters join b in Db.RequestFormTaskActioners on a.FormID equals b.FormID into ps from b in ps.DefaultIfEmpty() where (a.ProcInstID == ProsIncId || b.ProcInstID.ToString() == ProsIncId) select a.ReferenceID).FirstOrDefault().ToString(); if (!string.IsNullOrEmpty(ReferID)) { int procid = 0; procid = Convert.ToInt32(ProsIncId); var item = GetRequestDetails(ReferID, UserId, ProsIncId, "Task").FirstOrDefault(); var actions = worklist.Where(p => p.ProcInstID == procid).Select(P => P.Actions).FirstOrDefault(); /*item.actions = actions.Select(P => P.Name).ToList();*/ var items = actions.Select(P => P.Name).ToList(); item.actions = (from a in Db.ProcessStepLists join b in Db.ProcessActionLists on a.StepID equals b.StepID where (a.StepName == item.FormStatus) && items.Contains(b.K2ActionName) select new ProcessActionListDTO { ActionID = b.ActionID, Action = b.K2ActionName, ButtonName = b.ActionButtonName, DisplayOrder = b.DisplayOrder }).OrderBy(p => p.DisplayOrder).ToList(); // Approver return to Applicant, Prepare = Applicant, no return to preparer button if (item.FormStatus == "Return") { if (item.PreparerUserID == item.ApplicantUserID) { var returnToPreparerBtn = item.actions.Where(p => p.Action == "Rework").FirstOrDefault(); item.actions.Remove(returnToPreparerBtn); } else { var deleteBtn = item.actions.Where(p => p.Action == "Delete").FirstOrDefault(); item.actions.Remove(deleteBtn); } } WorkListItem.Add(item); } } else { List <CheckDelegationUser> record = new List <CheckDelegationUser>(); SqlParameter[] sqlp = { new SqlParameter("ProcInstId", ProsIncId), new SqlParameter("SUser", UserId), new SqlParameter("FromWorker", DBNull.Value) }; if (!string.IsNullOrEmpty(SUser)) { sqlp[2].Value = SUser; } record = Db.Database.SqlQuery <CheckDelegationUser>("exec [K2_checkSharedUser] @ProcInstId,@SUser,@FromWorker", sqlp).ToList(); if (record.Count() > 0) { string ReferID = (from a in Db.RequestFormMasters join b in Db.RequestFormTaskActioners on a.FormID equals b.FormID into ps from b in ps.DefaultIfEmpty() where (a.ProcInstID == ProsIncId || b.ProcInstID.ToString() == ProsIncId) select a.ReferenceID).FirstOrDefault().ToString(); var item = GetRequestDetails(ReferID, UserId, ProsIncId, "Task").FirstOrDefault(); string permission = ""; foreach (var r in record) { if (!string.IsNullOrEmpty(r.Permission)) { if (r.Permission == "1") { permission = "1"; } else { if (permission != "1") { permission = r.Permission; } } } } if (permission == "2") { item.Attachments = null; item.RequestList = null; item.Justification = null; item.EDeliveryDate = null; item.DurationOfUse = null; item.EstimatedCost = null; item.BudgetProvided = null; item.RequestCC = null; item.Remark = null; } item.Permission = permission; WorkListItem.Add(item); } else { //throw new System.ArgumentException("The user has no enough permission to open this item"); return(null); } } } catch (Exception ex) { throw ex; } return(WorkListItem); }