コード例 #1
0
ファイル: ApprovalTaskService.cs プロジェクト: k2-tdc/api
        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);
        }