// GET: DTPhanCongDaoTao/DTPhanCongDaoTao

        /// <summary>
        /// @author: duynn
        /// </summary>
        /// <returns></returns>
        public ActionResult Index()
        {
            AssignUserInfo();
            RecipientBusiness = Get <QL_NGUOINHAN_VANBANBusiness>();
            QLNguoiNhanVanBanIndexViewModel viewModel   = new QLNguoiNhanVanBanIndexViewModel();
            QL_NGUOINHAN_VANBAN_SEARCH_BO   searchModel = new QL_NGUOINHAN_VANBAN_SEARCH_BO();

            SessionManager.SetValue("QLNguoiNhanVanBanSearch", searchModel);
            viewModel.GroupRecipients = RecipientBusiness.GetDataByPage(searchModel, currentUser);
            viewModel.IsSystemAdmin   = currentUser.ListVaiTro.Any(x => x.MA_VAITRO == "QLHT");
            viewModel.DepartmentId    = currentUser.DM_PHONGBAN_ID.GetValueOrDefault();
            return(View(viewModel));
        }
        /// <summary>
        /// @author: duynn
        /// </summary>
        /// <returns></returns>
        public JsonResult SearchData(FormCollection collection)
        {
            AssignUserInfo();
            RecipientBusiness = Get <QL_NGUOINHAN_VANBANBusiness>();
            PageListResultBO <QL_NGUOINHAN_VANBAN_BO> result      = new PageListResultBO <QL_NGUOINHAN_VANBAN_BO>();
            QL_NGUOINHAN_VANBAN_SEARCH_BO             searchModel = (QL_NGUOINHAN_VANBAN_SEARCH_BO)SessionManager.GetValue("QLNguoiNhanVanBanSearch");

            if (searchModel == null)
            {
                searchModel = new QL_NGUOINHAN_VANBAN_SEARCH_BO();
            }
            //searchModel.QueryDeptId = currentUser.DM_PHONGBAN_ID.GetValueOrDefault();
            searchModel.QueryName = collection["TEN_NHOM"];
            result = RecipientBusiness.GetDataByPage(searchModel, currentUser);
            return(Json(result));
        }
        /// <summary>
        /// @author: duynn
        /// </summary>
        /// <returns></returns>
        public JsonResult GetDataPerPage(int pageSize, int pageIndex, string sortQuery)
        {
            AssignUserInfo();
            RecipientBusiness = Get <QL_NGUOINHAN_VANBANBusiness>();
            PageListResultBO <QL_NGUOINHAN_VANBAN_BO> result      = new PageListResultBO <QL_NGUOINHAN_VANBAN_BO>();
            QL_NGUOINHAN_VANBAN_SEARCH_BO             searchModel = (QL_NGUOINHAN_VANBAN_SEARCH_BO)SessionManager.GetValue("QLNguoiNhanVanBanSearch");

            if (searchModel == null)
            {
                searchModel = new QL_NGUOINHAN_VANBAN_SEARCH_BO();
            }
            //searchModel.QueryDeptId = currentUser.DM_PHONGBAN_ID.GetValueOrDefault();
            searchModel.pageIndex = pageIndex;
            searchModel.pageSize  = pageSize;
            searchModel.sortQuery = sortQuery;
            result = RecipientBusiness.GetDataByPage(searchModel, currentUser);
            return(Json(result));
        }
        /// <summary>
        /// @author: duynn
        /// @description: danh sách người nhận văn bản
        /// </summary>
        /// <param name="searchModel"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <returns></returns>
        public PageListResultBO <QL_NGUOINHAN_VANBAN_BO> GetDataByPage(
            QL_NGUOINHAN_VANBAN_SEARCH_BO searchModel, UserInfoBO user, int pageIndex = 1, int pageSize = 20)
        {
            var queryUsers  = this.context.DM_NGUOIDUNG;
            var queryResult = (from recipient in this.context.QL_NGUOINHAN_VANBAN
                               join dept in this.context.CCTC_THANHPHAN
                               on recipient.DM_PHONGBAN_ID equals dept.ID
                               into groupDeptRecipients
                               from gDeptRecipients in groupDeptRecipients.DefaultIfEmpty()
                               where recipient.IS_DELETE != true &&
                               (recipient.IS_DEFAULT == true || recipient.DM_PHONGBAN_ID == user.DM_PHONGBAN_ID)
                               orderby recipient.TEN_NHOM
                               select new QL_NGUOINHAN_VANBAN_BO()
            {
                ID = recipient.ID,
                TEN_NHOM = recipient.TEN_NHOM,
                NGUOINHAN_IDS = recipient.NGUOINHAN_IDS,
                IS_DEFAULT = recipient.IS_DEFAULT,
                DM_PHONGBAN_ID = recipient.DM_PHONGBAN_ID,
                TEN_PHONGBAN = gDeptRecipients.NAME,
            });

            if (searchModel != null)
            {
                if (string.IsNullOrEmpty(searchModel.QueryName) == false)
                {
                    searchModel.QueryName = searchModel.QueryName.Trim().ToLower();
                    queryResult           = queryResult.Where(x => x.TEN_NHOM != null && x.TEN_NHOM.Trim().ToLower().Contains(searchModel.QueryName));
                }

                if (!string.IsNullOrEmpty(searchModel.sortQuery))
                {
                    queryResult = queryResult.OrderBy(searchModel.sortQuery);
                }
                else
                {
                    queryResult = queryResult.OrderByDescending(x => x.ID);
                }
            }
            else
            {
                queryResult = queryResult.OrderByDescending(x => x.ID);
            }

            var result = new PageListResultBO <QL_NGUOINHAN_VANBAN_BO>();

            if (pageSize == -1)
            {
                var listData = queryResult.ToList();
                result.Count     = listData.Count;
                result.TotalPage = 1;
                result.ListItem  = listData;
            }
            else
            {
                var pagedListData = queryResult.ToPagedList(pageIndex, pageSize);
                result.Count     = pagedListData.TotalItemCount;
                result.TotalPage = pagedListData.PageCount;
                result.ListItem  = pagedListData.ToList();
            }
            foreach (var item in result.ListItem)
            {
                if (!string.IsNullOrEmpty(item.NGUOINHAN_IDS))
                {
                    List <long> userIds             = item.NGUOINHAN_IDS.ToListLong(',');
                    IQueryable <DM_NGUOIDUNG> users = queryUsers.Where(x => userIds.Contains(x.ID));
                    item.Members = string.Join("<br/>", users.Select(x => x.HOTEN).ToArray());
                }
            }
            return(result);
        }