Esempio n. 1
0
        /// <summary>
        /// Function used for Worklist Based on the search condition
        /// </summary>
        /// <param name="ReferID">ReferenceID (Optional)</param>
        /// <param name="CStat">Status (Optional)</param>
        /// <param name="FDate">FromDate (Optional)</param>
        /// <param name="TDate">ToDate (Optional)</param>
        /// <param name="Appl">Applicant Name (Optional)</param>
        /// <param name="UserId">UserId for checking authentication</param>
        /// <param name="Type">Task Owner</param>
        ///  SP  : K2_WorkList
        /// <returns></returns>
        /// <summary>
        public List <ChkFrmStatus> GetWorklist(string ReferID, string CStat, string FDate, string TDate, string UserId, string SUser, string ProsIncId, int offset = 0, int limit = 999999, string sort = null, string applicant = null, string applicantEmpNo = null)
        {
            string              proinsid   = "";
            WorkflowFacade      workfacade = new WorkflowFacade();
            List <WorklistItem> worklist   = new List <WorklistItem>();

            if (string.IsNullOrEmpty(SUser))
            {
                worklist = workfacade.GetWorklistItemForAllTasks(UserId);
                //if (worklist.Count() > 0)
                //{
                //    proinsid = String.Join(",", worklist.Select(P => P.ProcInstID)).TrimEnd(',');
                //}
            }
            else
            {
                List <WorklistItem> sharedworklist = workfacade.GetWorklistItemForAllTasks(SUser);
                var sharePermit = (from a in Db.SharingList
                                   join b in Db.DelegationProcess on a.ActivityGroupID equals b.GroupID into ps
                                   from b in ps.DefaultIfEmpty()
                                   where a.DelegationType == "Sharing" &&
                                   a.FromWorkerID == SUser &&
                                   a.ToWorkerID == UserId
                                   select b.K2StepName
                                   ).ToList();
                foreach (var i in sharedworklist)
                {
                    if (sharePermit.Contains(i.ActivityName))
                    {
                        worklist.Add(i);
                    }
                }
            }

            List <CheckStatus>  StatusList   = new List <CheckStatus>();
            List <ChkFrmStatus> FormRequests = new List <ChkFrmStatus>();

            if (worklist.Count() > 0)
            {
                try
                {
                    SqlParameter[] sqlp =
                    {
                        new SqlParameter("ReferID",        DBNull.Value),
                        new SqlParameter("CStatus",        DBNull.Value),
                        new SqlParameter("FDate",          DBNull.Value),
                        new SqlParameter("TDate",          DBNull.Value),
                        new SqlParameter("SUser",          DBNull.Value),
                        new SqlParameter("userid",         DBNull.Value),
                        new SqlParameter("TOwner",         DBNull.Value),
                        new SqlParameter("ProcIncId",      DBNull.Value),
                        new SqlParameter("offset",         offset),
                        new SqlParameter("limit",          limit),
                        new SqlParameter("sort",           sort),
                        new SqlParameter("applicant",      DBNull.Value),
                        new SqlParameter("applicantEmpNo", DBNull.Value)
                    };

                    if (!string.IsNullOrEmpty(ReferID))
                    {
                        sqlp[0].Value = ReferID;
                    }
                    if (!string.IsNullOrEmpty(CStat))
                    {
                        sqlp[1].Value = CStat;
                    }
                    if (!string.IsNullOrEmpty(FDate))
                    {
                        sqlp[2].Value = FDate;
                    }
                    if (!string.IsNullOrEmpty(TDate))
                    {
                        sqlp[3].Value = TDate;
                    }
                    if (!string.IsNullOrEmpty(SUser))
                    {
                        sqlp[4].Value = SUser;
                    }
                    if (!string.IsNullOrEmpty(UserId))
                    {
                        sqlp[5].Value = UserId;
                    }
                    if (!string.IsNullOrEmpty(applicant))
                    {
                        sqlp[11].Value = applicant;
                    }
                    if (!string.IsNullOrEmpty(applicantEmpNo))
                    {
                        sqlp[12].Value = applicantEmpNo;
                    }

                    if (string.IsNullOrEmpty(ProsIncId))
                    {
                        if (worklist.Count > 0)
                        {
                            sqlp[7].Value = String.Join(",", worklist.Select(P => P.ProcInstID)).TrimEnd(',');
                        }
                    }
                    else
                    {
                        sqlp[7].Value = ProsIncId;
                    }

                    StatusList = Db.Database.SqlQuery <CheckStatus>("exec [K2_WorkList] @ReferID,@CStatus,@FDate,@TDate,@SUser,@UserId,@TOwner,@ProcIncId,@offset,@limit,@sort,@applicant,@applicantEmpNo", sqlp).ToList();

                    //foreach (int FormID in StatusList.Select(P => P.FormID).Distinct())
                    foreach (var request in StatusList.DistinctBy(P => P.ProcInstID))
                    {
                        ChkFrmStatus status = new ChkFrmStatus();
                        //var request = StatusList.Where(P => P.FormID == FormID).FirstOrDefault();
                        if (!string.IsNullOrEmpty(request.ProcInstID))
                        {
                            int procid = 0;
                            procid = Convert.ToInt32(request.ProcInstID);
                            //if (worklist.Select(P => P.ProcInstID).Contains(procid))
                            //{
                            status.FormID              = request.FormID;
                            status.ProcInstID          = request.ProcInstID;
                            status.ReferenceID         = request.ReferenceID;
                            status.FormStatus          = request.FormStatus;
                            status.SubmittedOn         = request.SubmittedOn;
                            status.ApplicantUserId     = request.ApplicantUserID;
                            status.ApplicantEMP        = request.ApplicantEMP;
                            status.ApplicantFNAME      = request.ApplicantFNAME;
                            status.ApproverEmp         = request.ApproverEMP;
                            status.ApproverFNAME       = request.ApproverFNAME;
                            status.ProcInstID          = request.ProcInstID;
                            status.DisplayStatus       = request.DisplayStatus;
                            status.LastUser            = request.LastUser;
                            status.ActionTakerFullName = request.ActionTakerFullName;
                            status.ITSApproverFullName = request.ITSApproverFullName;
                            status.PreparerFNAME       = request.PreparerFullName;
                            status.CurrentActor        = request.CurrentActor;
                            status.SUser = request.SUser;

                            //if (!string.IsNullOrEmpty(request.ProcInstID))
                            //{

                            //if (!proinsid.Split(',').Contains(request.ProcInstID))
                            //{
                            //    status.ProcessUrl = worklist.Where(p => p.ProcInstID == procid).Select(P => P.Data).FirstOrDefault() + "&SharedBy=" + SUser;
                            //    status.Type = "Sharing";
                            //}
                            //else
                            //    status.ProcessUrl = worklist.Where(p => p.ProcInstID == procid).Select(P => P.Data).FirstOrDefault();

                            if (!string.IsNullOrEmpty(SUser))
                            {
                                status.Type = "Sharing";
                            }


                            //}
                            //status.ProcessUrl = worklist.Where(p => p.ProcInstID == procid).Select(P => P.Data).FirstOrDefault();
                            status.SN = worklist.Where(p => p.ProcInstID == procid).Select(P => P.SN).FirstOrDefault();
                            //var actions = worklist.Where(p => p.ProcInstID == procid).Select(P => P.Actions).FirstOrDefault();
                            //if (actions != null)
                            //    status.actions = actions.Select(P => P.Name).ToList();

                            if (request.Permission != "2")
                            {
                                List <ServiceLevel1> Level1lst = new List <ServiceLevel1>();
                                foreach (var FirstLevelService in StatusList.Where(P => P.FormID == request.FormID && P.ProcInstID == request.ProcInstID).Select(P => new { P.MMenu, P.MMenuGUID }).Distinct())
                                {
                                    if (!string.IsNullOrEmpty(FirstLevelService.MMenu))
                                    {
                                        ServiceLevel1 Level1 = new ServiceLevel1();
                                        Level1.Name = FirstLevelService.MMenu;
                                        Level1.GUID = new Guid(FirstLevelService.MMenuGUID);
                                        List <ServiceLevel2> Level2lst = new List <ServiceLevel2>();
                                        foreach (var SecondLevelService in StatusList.Where(P => P.FormID == request.FormID && P.ProcInstID == request.ProcInstID && P.MMenu == FirstLevelService.MMenu).DistinctBy(P => P.SubMenu))
                                        {
                                            ServiceLevel2 Level2 = new ServiceLevel2();
                                            Level2.Name   = SecondLevelService.SubMenu;
                                            Level2.GUID   = new Guid(SecondLevelService.SubMenuGUID);
                                            Level2.SValue = SecondLevelService.ServiceTypeValue;
                                            List <ServiceLevel3> Level3lst = new List <ServiceLevel3>();
                                            foreach (var ThirsLevelService in StatusList.Where(P => P.FormID == request.FormID && P.ProcInstID == request.ProcInstID && P.MMenu == FirstLevelService.MMenu && P.SubMenu == SecondLevelService.SubMenu).OrderBy(P => P.ServiceGUID))
                                            {
                                                ServiceLevel3 Level3 = new ServiceLevel3();
                                                Level3.Name        = ThirsLevelService.SSubMenu;
                                                Level3.GUID        = new Guid(ThirsLevelService.SSubMenuGUID);
                                                Level3.SValue      = ThirsLevelService.ServiceTypeValue;
                                                Level3.ControlFlag = ThirsLevelService.ControlFlag;
                                                Level3lst.Add(Level3);
                                            }
                                            if (Level3lst.Count > 0)
                                            {
                                                Level2.Level3 = Level3lst;
                                                //Level2.GUID = Guid.Empty;   // To return Null Value.
                                                Level2.SValue = null;
                                            }
                                            else
                                            {
                                                Level2.Level3 = null;
                                            }
                                            Level2lst.Add(Level2);
                                        }
                                        if (Level2lst.Count > 0)
                                        {
                                            Level1.Level2 = Level2lst;
                                        }
                                        else
                                        {
                                            Level1.Level2 = null;
                                        }
                                        Level1lst.Add(Level1);
                                    }
                                }
                                if (Level1lst.Count > 0)
                                {
                                    status.RequestList = Level1lst;
                                }
                                else
                                {
                                    status.RequestList = null;
                                }
                            }
                            FormRequests.Add(status);
                            //}
                        }
                    }
                }
                catch (Exception ex)
                {
                    FormRequests = null;
                    throw ex;
                }
            }
            return(FormRequests);
        }