Пример #1
0
        /// <summary>
        /// Kiểm tra 1 user có thỏa mãn 1 step config hay không
        /// </summary>
        /// <param name="user"></param>
        /// <param name="step"></param>
        /// <returns></returns>
        private bool CheckUserStep(UserInfoBO user, WF_STEP step, WF_STEP_USER_PROCESS config)
        {
            var isResult = true;

            if (config.CHUCVU_ID.HasValue)
            {
                if (user.CHUCVU_ID != config.CHUCVU_ID)
                {
                    isResult = false;
                    return(isResult);
                }
            }
            if (config.VAITRO_ID.HasValue)
            {
                if (!user.ListVaiTro.Any(x => x.DM_VAITRO_ID == config.VAITRO_ID))
                {
                    isResult = false;
                    return(isResult);
                }
            }
            if (config.PHONGBAN_ID.HasValue)
            {
                if (user.DM_PHONGBAN_ID != config.PHONGBAN_ID)
                {
                    isResult = false;
                    return(isResult);
                }
            }
            if (!config.IS_CUNGPHONG.HasValue)
            {
                return(false);
            }

            return(isResult);
        }
Пример #2
0
        public void OnActionExecuted(ActionExecutedContext filterContext)
        {
            UserInfoBO loggedUser = filterContext.HttpContext.Session[SessionManager.USER_INFO] as UserInfoBO;

            if (actionAudit == null)
            {
                return;
            }

            if (loggedUser != null && string.IsNullOrWhiteSpace(actionAudit.USER_NAME) && !string.IsNullOrWhiteSpace(loggedUser.TENDANGNHAP))
            {
                actionAudit.USER_NAME = loggedUser.TENDANGNHAP;
            }


            if (actionAudit.USER_NAME == null)
            {
                if (actionAudit.ACTION != "ExecuteChangePass")
                {
                    return;
                }
                else
                {
                    actionAudit.USER_NAME = "Error";
                }
            }

            actionAudit.END_AUDIT_TIME = DateTime.Now;
            LogAdapter.Insert(actionAudit);
        }
Пример #3
0
 private List <int> initDonVi(UserInfoBO currentUser)
 {
     if (IsInActivities(currentUser.ListThaoTac, PermissionVanbanModel.DONVI))
     {
         CCTC_THANHPHAN DonVi = CCTC_THANHPHANBusiness.Find(currentUser.DM_PHONGBAN_ID);
         List <int>     Ids   = new List <int>();
         if (DonVi != null && DonVi.PARENT_ID.HasValue && DonVi.PARENT_ID.Value > 0)
         {
             Ids = CCTC_THANHPHANBusiness.GetDSChild(DonVi.PARENT_ID.Value).Select(x => x.ID).ToList();
             Ids.Add(DonVi.PARENT_ID.Value);
         }
         else
         {
             Ids = CCTC_THANHPHANBusiness.GetDSChild(currentUser.DM_PHONGBAN_ID.HasValue ? currentUser.DM_PHONGBAN_ID.Value : 0).Select(x => x.ID).ToList();
             Ids.Add(currentUser.DM_PHONGBAN_ID.HasValue ? currentUser.DM_PHONGBAN_ID.Value : 0);
         }
         return(Ids);
     }
     //Nếu là quản lý phòng ban
     else if (IsInActivities(currentUser.ListThaoTac, PermissionVanbanModel.PHONGBAN))
     {
         List <int> Ids = CCTC_THANHPHANBusiness.GetDSChild(currentUser.DM_PHONGBAN_ID.HasValue ? currentUser.DM_PHONGBAN_ID.Value : 0).Select(x => x.ID).ToList();
         Ids.Add(currentUser.DM_PHONGBAN_ID.HasValue ? currentUser.DM_PHONGBAN_ID.Value : 0);
         return(Ids);
     }
     return(new List <int>());
 }
Пример #4
0
        public ActionResult Index()
        {
            UserInfoBO         user  = (UserInfoBO)SessionManager.GetUserInfo();
            ChatIndexViewModel model = new ChatIndexViewModel();

            CHAT_NOIDUNGBusiness = Get <CHAT_NOIDUNGBusiness>();
            model.ListChat       = CHAT_NOIDUNGBusiness.GetListChatHistory(user.DeptParentID.Value, user.ID, user.TENDANGNHAP, user.HOTEN);
            return(View(model));
        }
Пример #5
0
        public void OnActionExecuting(ActionExecutingContext filterContext)
        {
            actionAudit = new ACTION_AUDIT();

            actionAudit.CONTROLLER = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            actionAudit.ACTION     = filterContext.ActionDescriptor.ActionName;
            actionAudit.USER_AGENT = filterContext.HttpContext.Request.UserAgent.Substring(0, 60);

            actionAudit.BEGIN_AUDIT_TIME = DateTime.Now;
            actionAudit.IP          = filterContext.HttpContext.Request.UserHostAddress;
            actionAudit.DESCRIPTION = Dns.GetHostName();
            if (filterContext.ActionParameters.Count > 0)
            {
                var ParameterFirst = filterContext.ActionParameters.First();
                if (!typeof(LoginViewModel).IsInstanceOfType(ParameterFirst.Value))
                {
                    if (typeof(System.Web.HttpPostedFileBase[]).IsInstanceOfType(ParameterFirst.Value))
                    {
                        var fileFirst = (System.Web.HttpPostedFileBase[])ParameterFirst.Value;
                        if (fileFirst.First() != null)
                        {
                            var fileObj = fileFirst.First();
                            var tmpObj  = new
                            {
                                FileName      = fileObj.FileName,
                                ContentLength = fileObj.ContentLength,
                                ContentType   = fileObj.ContentType
                            };
                            var DataObject = Json.Encode(tmpObj);
                            actionAudit.DESCRIPTION = actionAudit.DESCRIPTION + ". Thông tin Object:" + DataObject.ToString();
                        }
                    }
                    else
                    {
                        var DataObject = Json.Encode(ParameterFirst.Value);
                        actionAudit.DESCRIPTION = actionAudit.DESCRIPTION + ". Thông tin Object:" + DataObject.ToString();
                    }
                }
            }
            string clientIP = filterContext.HttpContext.Request.Headers["X-Forwarded-For"];

            if (!string.IsNullOrWhiteSpace(clientIP))
            {
                actionAudit.IP = clientIP;
            }
            UserInfoBO loggedUser = filterContext.HttpContext.Session[SessionManager.USER_INFO] as UserInfoBO;

            if (loggedUser != null)
            {
                actionAudit.USER_NAME = loggedUser.TENDANGNHAP;
            }
        }
Пример #6
0
        public static void LoadUserInfo(string UserName)
        {
            DBEntities          context  = new DBEntities();
            DmNguoidungBusiness bus      = new DmNguoidungBusiness(new UnitOfWork());
            UserInfoBO          UserInfo = bus.GetUserInfo(UserName);

            if (UserInfo.LastLoginDate == null)
            {
                DM_NGUOIDUNG user = bus.repository.Find(UserInfo.UserID);
                //user.LAST_LOGIN_DATE = DateTime.Now;
                bus.Save(user);
            }
            SessionManager.SetValue(SessionManager.USER_INFO, UserInfo);
        }
Пример #7
0
        public static bool ValidateLogin(string UserName, string Password)
        {
            //if (DateTime.Now.Year == 2017)
            //{
            //    if (DateTime.Now.Month >= 9 || DateTime.Now.Month < 3)
            //    {
            //        return false;
            //    }
            //}
            //else
            //{
            //    return false;
            //}
            //var MachineName = Environment.MachineName;
            //if (MachineName != "DELL-PC")
            //{
            //    return false;
            //}
            DBEntities context = new DBEntities();

            try
            {
                DmNguoidungBusiness bus = new DmNguoidungBusiness(new UnitOfWork());
                //UserInfoBO UserInfo = bus.GetUserInfo(UserName, CAPDONVI, TINH_ID, HUYEN_ID, xaid, DONVITW_ID);
                UserInfoBO UserInfo = bus.GetUserInfo(UserName);
                if (UserInfo.UserID <= 0)
                {
                    return(false);
                }
                string pass = VtEncodeData.Encode_Data(Password + UserInfo.PasswordSalt);
                //string pass = VtCryptography.Encrypt(Password + UserInfo.PasswordSalt, UserInfo.PasswordSalt);

                if (UserInfo.Password == pass)///////////
                {
                    SessionManager.SetValue(SessionManager.USER_INFO, UserInfo);
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message + "\n" + ex.StackTrace);
                return(false);
            }
        }
Пример #8
0
        public PartialViewResult GetMoreChatContent(string fromUser, string toUser, string fromFullName, string toFullName, string chatId, int maxItem)
        {
            CHAT_NOIDUNGBusiness = Get <CHAT_NOIDUNGBusiness>();
            UserInfoBO    user  = (UserInfoBO)SessionManager.GetUserInfo();
            ChatViewModel model = new ChatViewModel();

            model.cosoId          = user.DeptParentID.Value;
            model.fromUser        = fromUser;
            model.toUser          = toUser;
            model.fromFullName    = fromFullName;
            model.toFullName      = toFullName;
            model.currentUserName = user.TENDANGNHAP;
            model.listChat        = CHAT_NOIDUNGBusiness.GetListChat(fromUser, toUser, DateTime.Now, 0, 15, maxItem);
            model.chatPanel_id    = chatId;
            return(PartialView("_GetMoreChatContent", model));
        }
        public ActionResult Index()
        {
            UserInfoBO user = (UserInfoBO)SessionManager.GetUserInfo();

            QuanLyHoSoBusiness      = Get <QuanLyHoSoBusiness>();
            QuanLyVanBanBusiness    = Get <QuanLyVanBanBusiness>();
            DM_DANHMUC_DATABusiness = Get <DM_DANHMUC_DATABusiness>();
            QuanLyVanBanIndexViewModel model = new QuanLyVanBanIndexViewModel();

            model.Source         = QuanLyHoSoBusiness.GetPageForVanBan(null, pageNumber, pageSize);
            model.ListHoSoNam    = GetListNam();
            model.ListNamChinhLy = GetListNam();
            model.ListKho        = DM_DANHMUC_DATABusiness.GetDropDow(DMLOAI_CONSTANT.QLHS_KHO);
            model.ListPhongBan   = DM_DANHMUC_DATABusiness.GetDropDow(DMLOAI_CONSTANT.QLHS_CO_QUAN_BAN_HANH);
            ViewBag.PageSize     = pageSize;
            ViewBag.PageNumber   = pageNumber;
            return(View(model));
        }
Пример #10
0
        public void sendMessageMultipleUsers(List <long> listUserIds, UserInfoBO currentUser,
                                             string TIEUDETHONGBAO, string NOIDUNGTHONGBAO, string URLTHONGBAO, string targetScreen
                                             , bool isTaskNotification, long objId, int docType)
        {
            var ListToken = (from token in this.context.QL_TOKEN
                             join user in this.context.DM_NGUOIDUNG
                             on token.DM_NGUOIDUNG_ID equals user.ID
                             into group1
                             from g1 in group1.DefaultIfEmpty()
                             where token.DM_NGUOIDUNG_ID.HasValue &&
                             listUserIds.Contains(token.DM_NGUOIDUNG_ID.Value) && true == token.IS_ACTIVE
                             select new QL_TOKEN_BO
            {
                DM_NGUOIDUNG_ID = token.DM_NGUOIDUNG_ID,
                HOTEN = g1.HOTEN,
                ID = token.ID,
                IS_ACTIVE = token.IS_ACTIVE,
                NGAYTAO = token.NGAYTAO,
                TOKEN = token.TOKEN,
                TEN_DANGNHAP = g1.TENDANGNHAP
            }).ToList();
            QL_TOKEN_BO Token = null;
            var         FCM_NOTIFICATIONBusiness = new FCM_NOTIFICATIONBusiness(new UnitOfWork());

            //NotifCommon notifCommon = new NotifCommon(FcmConstant.ServerKey, FcmConstant.SenderId);
            foreach (long userId in listUserIds)
            {
                Token = ListToken.Where(x => userId == x.DM_NGUOIDUNG_ID).FirstOrDefault();
                SYS_TINNHAN TinNhan = new SYS_TINNHAN();
                TinNhan.TIEUDE           = TIEUDETHONGBAO;
                TinNhan.NOIDUNG          = NOIDUNGTHONGBAO;
                TinNhan.URL              = URLTHONGBAO;
                TinNhan.TO_USER_ID       = userId;
                TinNhan.TO_USERNAME      = Token != null ? Token.TEN_DANGNHAP : "";
                TinNhan.FROM_USER_ID     = (long)currentUser.ID;
                TinNhan.FROM_USERNAME    = currentUser.TENDANGNHAP;
                TinNhan.IS_READ          = false;
                TinNhan.NGAYTAO          = DateTime.Now;
                TinNhan.NGUOITAO         = currentUser.ID;
                TinNhan.NOTIFY_ITEM_ID   = objId;
                TinNhan.NOTIFY_ITEM_TYPE = isTaskNotification ? THONGBAO_CONSTANT.CONGVIEC : THONGBAO_CONSTANT.VANBAN;
                this.Save(TinNhan, targetScreen, isTaskNotification, objId, docType);
            }
        }
Пример #11
0
        /// <summary>
        /// Phương thức để xác nhận đối tượng sẽ nhận trạng thái nào khi được tạo với các vai trò và chức vụ khác nhau
        /// </summary>
        /// <returns></returns>
        public int GetState(int wfid, UserInfoBO userId)
        {
            var lstStep    = this.context.WF_STEP.Where(x => x.WF_ID == wfid).ToList();
            var BeginState = this.context.WF_STATE.Where(x => x.WF_ID == wfid && x.IS_START == true).FirstOrDefault();

            if (BeginState != null)
            {
                var isFirst = true;
                if (BeginState.CHUCVU_ID.HasValue)
                {
                    if (userId.CHUCVU_ID != BeginState.CHUCVU_ID)
                    {
                        isFirst = false;
                    }
                }
                if (BeginState.VAITRO_ID.HasValue)
                {
                    if (!userId.ListVaiTro.Any(x => x.DM_VAITRO_ID == BeginState.VAITRO_ID.GetValueOrDefault()))
                    {
                        isFirst = false;
                    }
                }
                if (isFirst)
                {
                    return(BeginState.ID);
                }
            }
            int currentState;

            foreach (var item in lstStep)
            {
                var config = this.context.WF_STEP_USER_PROCESS.Where(x => x.IS_XULYCHINH == true && x.WF_STEP_ID == item.ID).FirstOrDefault();
                if (config != null)
                {
                    var checkUser = CheckUserStep(userId, item, config);
                    if (checkUser)
                    {
                        currentState = item.STATE_END.GetValueOrDefault();
                        return(currentState);
                    }
                }
            }
            return(BeginState.ID);
        }
Пример #12
0
        public static void SendMailTemplate(UserInfoBO currentUser, string body, string subject, List <string> address)
        {
            var emailtemplate_path = Path.Combine(ConfigurationManager.AppSettings["FileUpload"], ConfigurationManager.AppSettings["temple_CanhCao_VB"]);

            if (!string.IsNullOrEmpty(emailtemplate_path) && File.Exists(emailtemplate_path))
            {
                var strEmail = File.ReadAllText(emailtemplate_path);
                strEmail = strEmail.Replace("[[Email]]", currentUser.EMAIL);
                strEmail = strEmail.Replace("[[HoTen]]", currentUser.HOTEN);
                strEmail = strEmail.Replace("[[Title]]", subject);
                strEmail = strEmail.Replace("[[Subtitle]]", subject);
                var lstViec = "";
                lstViec += "<tr class='item-lst'><td class='img-lst'><img src='http://sv1.upsieutoc.com/2017/11/22/icon-document.png'></td>";
                lstViec += body;
                lstViec += "</tr>";
                strEmail = strEmail.Replace("[[contentlst]]", lstViec);
                sendEmail(strEmail, subject, address);
            }
        }
Пример #13
0
        public string GetChild(string pid, string sort)
        {
            UserInfoBO user = GetUserInfo();
            List <THUMUC_LUUTRU_BO>  subMenu    = new List <THUMUC_LUUTRU_BO>();
            List <TAILIEUDINHKEM_BO> lstTaiLieu = new List <TAILIEUDINHKEM_BO>();

            TAILIEUDINHKEMBusiness = Get <TAILIEUDINHKEMBusiness>();
            CCTC_THANHPHANBusiness = Get <CCTC_THANHPHANBusiness>();
            int pID = pid.ToIntOrZero();

            THUMUC_LUUTRUBusiness = Get <THUMUC_LUUTRUBusiness>();
            EFILE_CHIASEBusiness  = Get <EFILE_CHIASEBusiness>();
            THUMUC_LUUTRU THUMUC = THUMUC_LUUTRUBusiness.Find(pID);

            if (THUMUC != null)
            {
                if (THUMUC.PERMISSION.HasValue && THUMUC.PERMISSION.Value == FolderPermission.CAN_WRITE)
                {
                    subMenu = new List <THUMUC_LUUTRU_BO>();
                }
                else
                {
                    CCTC_THANHPHAN DONVI = new CCTC_THANHPHAN();
                    if (THUMUC != null)
                    {
                        DONVI = CCTC_THANHPHANBusiness.Find(THUMUC.DONVI_ID);
                    }
                    else
                    {
                        DONVI = CCTC_THANHPHANBusiness.Find(user.DM_PHONGBAN_ID);
                    }
                    List <int> Ids = new List <int>();
                    #region Lấy tài liệu + thư mục con
                    subMenu = TAILIEUDINHKEMBusiness.getListFileByFolder(pID, LOAITAILIEU.TM_UPLOAD, 0, DONVI.NAME, THUMUC);
                    CCTC_THANHPHANBusiness = Get <CCTC_THANHPHANBusiness>();
                    subMenu.AddRange(THUMUC_LUUTRUBusiness.GetThuMucByParent(pID, 0, Ids));
                    #endregion
                }
            }
            return(JsonConvert.SerializeObject(subMenu));
        }
Пример #14
0
        /// <summary>
        /// @author: duynn
        /// @description: lấy trạng thái cuối cùng của đối tượng trong luồng xử lý
        /// </summary>
        /// <param name="itemType"></param>
        /// <param name="user"></param>
        /// <returns></returns>
        public WF_STATE GetFinalStateOfItem(string itemType, UserInfoBO user)
        {
            WF_STATE  result   = new WF_STATE();
            WF_MODULE wfModule = this.context.WF_MODULE.Where(x => x.MODULE_CODE == itemType).FirstOrDefault();

            if (wfModule != null && string.IsNullOrEmpty(wfModule.WF_STREAM_ID) == false)
            {
                //Lấy thông tin luồng xử lý
                var department  = this.context.CCTC_THANHPHAN.Find(user.DM_PHONGBAN_ID) ?? new CCTC_THANHPHAN();
                var wfStreamIds = wfModule.WF_STREAM_ID.ToListInt(',');

                var wfStream = this.context.WF_STREAM
                               .Where(x => x.LEVEL_ID == department.CATEGORY && wfStreamIds.Contains(x.ID))
                               .FirstOrDefault() ?? new WF_STREAM();

                result = this.context.WF_STATE
                         .Where(x => x.WF_ID == wfStream.ID && x.IS_KETTHUC == true)
                         .FirstOrDefault();
            }
            return(result);
        }
Пример #15
0
        /// <summary>
        /// @description: lấy danh sách người liên quan đến công việc
        /// </summary>
        /// <param name="user"></param>
        /// <param name="task"></param>
        /// <returns></returns>
        public List <long> GetEmployeesInvolveToTask(UserInfoBO user, HSCV_CONGVIEC task)
        {
            //HSCV_CONGVIECBusiness = Get<HSCV_CONGVIECBusiness>();
            //HSCV_CONGVIEC_NGUOITHAMGIAXULYBusiness = Get<HSCV_CONGVIEC_NGUOITHAMGIAXULYBusiness>();
            List <long> result = new List <long>();

            if (user.ID != task.NGUOIGIAOVIEC_ID)
            {
                result.Add(task.NGUOIGIAOVIEC_ID ?? 0);
            }

            if (user.ID != task.NGUOIXULYCHINH_ID)
            {
                result.Add(task.NGUOIXULYCHINH_ID ?? 0);
            }

            //danh sách người tham gia xử ly
            List <long> joinResult = this.context.HSCV_CONGVIEC_NGUOITHAMGIAXULY.Where(x => x.CONGVIEC_ID == task.ID && x.USER_ID != user.ID)
                                     .Select(x => x.USER_ID.Value).ToList();

            result.AddRange(joinResult);
            return(result);
        }
Пример #16
0
        /// <summary>
        /// @description: lưu tin nhắn vào database
        /// @author: duynn
        /// @since: 21/05/2018
        /// </summary>
        /// <param name="sender">người gửi</param>
        /// <param name="recipientIds">mã người nhận</param>
        /// <param name="title">tiêu đề</param>
        /// <param name="content">nội dung</param>
        /// <param name="path">đường link thông báo</param>
        public void SaveMessageToDb(UserInfoBO sender, List <long> recipientIds, long objectId, int objectType, string title, string content, string path)
        {
            try
            {
                if (recipientIds != null && recipientIds.Count > 0)
                {
                    foreach (var recipientId in recipientIds)
                    {
                        DM_NGUOIDUNG recipient = this.context.DM_NGUOIDUNG.Find(recipientId);

                        if (recipient != null)
                        {
                            SYS_TINNHAN message = new SYS_TINNHAN();
                            message.TIEUDE           = title;
                            message.NOIDUNG          = content;
                            message.URL              = path;
                            message.TO_USER_ID       = recipientId;
                            message.TO_USERNAME      = recipient.HOTEN;
                            message.FROM_USER_ID     = (long)sender.ID;
                            message.FROM_USERNAME    = sender.TENDANGNHAP;
                            message.IS_READ          = false;
                            message.NGAYTAO          = DateTime.Now;
                            message.NGUOITAO         = sender.ID;
                            message.NOTIFY_ITEM_ID   = objectId;
                            message.NOTIFY_ITEM_TYPE = objectType;
                            this.repository.Insert(message);
                            this.repository.Save();
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Пример #17
0
 static BoFactory()
 {
     IProxy proxy = ProxyFactory.CreateProxy();
     _VersionTrackBo = proxy.CreateObject<SmartBox.Console.Bo.VersionTrackBo>();
     _SMC_UnitBo = proxy.CreateObject<SMC_UnitBo>();
     _SMC_AutoTableIDBo = proxy.CreateObject<SMC_AutoTableIDBo>();
     _SMC_FunctionRoleBo = proxy.CreateObject<SMC_FunctionRoleBo>();
     _SMC_FunctionsBo = proxy.CreateObject<SMC_FunctionsBo>();
     _SMC_RoleBo = proxy.CreateObject<SMC_RoleBo>();
     _SMC_UserListBo = proxy.CreateObject<SMC_UserListBo>();
     _MonitorBO = proxy.CreateObject<MonitorBO>();
     _AppCenterBO = proxy.CreateObject<SmartBox.Console.Bo.AppCenter.AppCenterBO>();
     _SMC_PackageExtBO = proxy.CreateObject<SmartBox.Console.Bo.SMC_PackageExtBO>();
     _PushManageBO = proxy.CreateObject<SmartBox.Console.Bo.PushManageBO>();
     _SMC_BUAUserSyncToInsideBO = proxy.CreateObject<SmartBox.Console.Bo.SMC_BUAUserSyncToInsideBO>();
     _SMC_BUAUserSyncToOutsideBO = proxy.CreateObject<SmartBox.Console.Bo.SMC_BUAUserSyncToOutsideBO>();
     _SMC_PackageExtSyncToOutsideBO = proxy.CreateObject<SmartBox.Console.Bo.SMC_PackageExtSyncToOutsideBO>();
     _StatisticsBO = proxy.CreateObject<StatisticsBO>();
     _SMC_PushDllBO = proxy.CreateObject<SMC_PushDllBO>();
     _StyleBO = proxy.CreateObject<StyleBO>();
     _StyleHomeItemBO = proxy.CreateObject<StyleHomeItemBO>();
     _SMC_UserBo = proxy.CreateObject<SMC_UserBo>();
     _CommonBO = proxy.CreateObject<CommonBO>();
     _SMC_UserExceptionBo = proxy.CreateObject<SMC_UserExceptionBo>();
     _DeviceExceptionBo = proxy.CreateObject<DeviceExceptionBo>();
     _DeviceBo = proxy.CreateObject<DeviceBO>();
     _GlobalParamBO = proxy.CreateObject<GlobalParamBO>();
     _SMC_PackageExtHistoryBO = proxy.CreateObject<SMC_PackageExtHistoryBO>();
     _ApplicationBo = proxy.CreateObject<ApplicationBo>();
     _SystemConfigBo = proxy.CreateObject<SystemConfigBO>();
     _DeviceUserApplyBO = proxy.CreateObject<DeviceUserApplyBO>();
     _SMC_PackageFAQBO = proxy.CreateObject<SMC_PackageFAQBO>();
     _UserInfoBO = proxy.CreateObject<UserInfoBO>();
     _ActionExtendBO = proxy.CreateObject<ActionExtendBO>();
     _Action4AndroidBO = proxy.CreateObject<Action4AndroidBO>();
     _App4AIBO = proxy.CreateObject<App4AIBO>();
     _Package4AIBO = proxy.CreateObject<Package4AIBO>();
     _AppPrivilegeBO = proxy.CreateObject<AppPrivilegeBO>();
     _MonitorDefindBO = proxy.CreateObject<MonitorDefindBO>();
 }
Пример #18
0
        /// <summary>
        /// @author: duynn
        /// @description: kiểm tra các văn bản đến gửi nội bộ đã được đọc
        /// </summary>
        /// <param name="itemType"></param>
        /// <param name="itemId"></param>
        /// <param name="departmentId"></param>
        /// <returns></returns>
        public bool CheckIsRead(string itemType, long itemId, CCTC_THANHPHAN department, UserInfoBO currentUser)
        {
            bool isRead = false;

            if (itemType == MODULE_CONSTANT.VANBANDENNOIBO)
            {
                WF_MODULE module = null;
                if (department.TYPE == 10)
                {
                    module = this.context.WF_MODULE.Where(x => x.MODULE_CODE == MODULE_CONSTANT.VANBANDEN)
                             .FirstOrDefault();
                }
                else if (department.PARENT_ID == currentUser.DeptParentID)
                {
                    module = this.context.WF_MODULE.Where(x => x.MODULE_CODE == MODULE_CONSTANT.VANBANDENNOIBO)
                             .FirstOrDefault();
                }

                if (module != null)
                {
                    var       workFlowIds = module.WF_STREAM_ID.ToListInt(',');
                    WF_STREAM stream      = this.context.WF_STREAM.Where(x => x.LEVEL_ID == department.CATEGORY && workFlowIds.Contains(x.ID)).FirstOrDefault();
                    WF_STATE  state       = this.context.WF_STATE.Where(x => x.IS_START == true && x.WF_ID == stream.ID).FirstOrDefault();

                    var         userBusiness = new DM_NGUOIDUNGBusiness(new UnitOfWork());
                    List <long> userIds      = new List <long>();

                    if (department.TYPE == 10)
                    {
                        userIds = userBusiness
                                  .GetUserByRoleAndParentDept(state.VAITRO_ID.GetValueOrDefault(), department.ID)
                                  .Select(x => long.Parse(x.Value)).ToList();
                    }
                    else if (department.PARENT_ID == currentUser.DeptParentID)
                    {
                        userIds = userBusiness
                                  .GetUserByRoleAndDeptId(state.VAITRO_ID.GetValueOrDefault(), department.ID)
                                  .Select(x => long.Parse(x.Value)).ToList();
                    }

                    if (!userIds.Any())
                    {
                        //lấy người dùng có vai trò cao nhất
                        var highestPriorityUser = userBusiness.GetUserHighestPriority(department.ID);
                        userIds.Add(highestPriorityUser.ID);
                    }

                    isRead = (from read in this.context.HSCV_READVANBAN.Where(x => x.TYPE == 1)
                              join vanban in this.context.HSCV_VANBANDEN.Where(x => x.VANBANDI_ID == itemId)
                              on read.VANBAN_ID equals vanban.ID
                              join user in this.context.DM_NGUOIDUNG
                              on read.USER_ID equals user.ID
                              join dept in this.context.CCTC_THANHPHAN
                              on user.DM_PHONGBAN_ID equals dept.ID
                              select read.USER_ID).Where(x => userIds.Contains(x)).Count() > 0;
                }
            }
            return(isRead);
        }
Пример #19
0
        /// <summary>
        /// @author:duynn
        /// @description: gửi đơn vị nhận bên ngoài
        /// @since: 10/06/2019
        /// </summary>
        /// <param name="entityVanBanDi"></param>
        /// <param name="sms"></param>
        /// <returns></returns>
        public bool SaveVanBanPhatHanhToDonVi(HSCV_VANBANDI entityVanBanDi, SMSDAL.SendSMSDAL sms)
        {
            bool result = true;

            try
            {
                DM_NHOMDANHMUC entityNhomDanhMuc = DM_NHOMDANHMUCBusiness.repository.All()
                                                   .FirstOrDefault(x => x.GROUP_CODE == DMLOAI_CONSTANT.SOVANBANDEN);

                DM_NGUOIDUNG entityNguoiKy = DM_NGUOIDUNGBusiness.Find(entityVanBanDi.NGUOIKY_ID);

                List <TAILIEUDINHKEM> groupFiles = TAILIEUDINHKEMBusiness.GetNewestData(entityVanBanDi.ID, LOAITAILIEU.VANBAN);

                List <int> idsDonViNhan = new List <int>();

                if (!string.IsNullOrEmpty(entityVanBanDi.DONVINHAN_INTERNAL_ID))
                {
                    var idsDonViDaNhan = entityVanBanDi.DONVINHAN_INTERNAL_ID.ToListInt(',');
                    idsDonViNhan.AddRange(idsDonViDaNhan);
                    entityVanBanDi.DONVINHAN_INTERNAL_ID = string.Join(",", idsDonViNhan.ToArray());
                }

                List <CCTC_THANHPHAN> groupDonViNhan = CCTC_THANHPHANBusiness.repository.AllNoTracking
                                                       .Where(x => idsDonViNhan.Contains(x.ID)).ToList();
                List <LOGSMS>               groupLogSMS          = new List <LOGSMS>();
                List <TAILIEUDINHKEM>       groupForwardFiles    = new List <TAILIEUDINHKEM>();
                List <WF_ITEM_USER_PROCESS> groupItemUserProcess = new List <WF_ITEM_USER_PROCESS>();
                foreach (var dept in groupDonViNhan)
                {
                    WF_STATE firstState = null;

                    //kiểm tra có phải là gửi nội bộ hay không?
                    bool isSendInternal = false;
                    //- trường hợp gửi cho các ban ngành cấp tỉnh và các huyện xa -> thành văn bản đến của các đơnvị nhận được
                    if (dept.TYPE == DEPTTYLELABEL.ToIntOrZero())
                    {
                        //- trường hợp này là văn bản đến bình thường
                        var workflowModule = WF_MODULEBusiness.repository
                                             .All().FirstOrDefault(x => x.MODULE_CODE == MODULE_CONSTANT.VANBANDEN);

                        var workflowStreamIds = workflowModule.WF_STREAM_ID.ToListInt(',');

                        //- lấy luồng xử lý của từng đơn vị
                        var workflowStream = WF_STREAMBusiness.repository.All()
                                             .FirstOrDefault(x => x.LEVEL_ID == dept.CATEGORY && workflowStreamIds.Contains(x.ID));

                        //lấy trạng thái xử lý ban đầu cảu đơn vị
                        firstState = WF_STATEBusiness.repository.All()
                                     .FirstOrDefault(x => x.IS_START == true && x.WF_ID == workflowStream.ID);
                    }
                    else if (dept.PARENT_ID == currentUser.DeptParentID)
                    {
                        isSendInternal = true;
                        //- trường hợp gửi các phòng ban thuộc tỉnh ủy => thành văn bản đến nội bộ của tỉnh
                        var workflowModule = WF_MODULEBusiness.repository.All()
                                             .FirstOrDefault(x => x.MODULE_CODE == MODULE_CONSTANT.VANBANDENNOIBO);

                        var workflowStreamIds = workflowModule.WF_STREAM_ID.ToListInt(',');

                        //- lấy luồng xử lý của từng đơn vị
                        var workflowStream = WF_STREAMBusiness.repository.All()
                                             .FirstOrDefault(x => x.LEVEL_ID == dept.CATEGORY && workflowStreamIds.Contains(x.ID));

                        firstState = WF_STATEBusiness.repository.All()
                                     .FirstOrDefault(x => x.IS_START == true && x.WF_ID == workflowStream.ID);
                    }


                    UserInfoBO processor = null;

                    /**
                     * kiểm tra vai trò nhận của trạng thái đầu tiên
                     */
                    if (firstState != null)
                    {
                        /**
                         * lấy người thuộc phòng ban có vai trò xử lý
                         */
                        var receiver = DM_NGUOIDUNGBusiness.GetUserByRoleAndDeptId(firstState.VAITRO_ID.GetValueOrDefault(), dept.ID).FirstOrDefault();
                        if (receiver != null)
                        {
                            processor = DM_NGUOIDUNGBusiness.GetNewUserInfo(receiver.Value.ToLongOrZero());
                        }
                    }


                    var dataSoVanBanDen = DM_DANHMUC_DATABusiness.GetSoVanBan(DMLOAI_CONSTANT.SOVANBANDEN, DateTime.Now.Year, dept.ID);
                    if (dataSoVanBanDen == null)
                    {
                        //tạo sổ văn bản đến
                        dataSoVanBanDen = new DM_DANHMUC_DATA()
                        {
                            DEPTID     = dept.ID,
                            TEXT       = "Sổ văn bản đến " + DateTime.Now.Year,
                            DATA       = DateTime.Now.Year,
                            DM_NHOM_ID = entityNhomDanhMuc.ID
                        };
                        DM_DANHMUC_DATABusiness.Save(dataSoVanBanDen);
                    }

                    HSCV_VANBANDEN entityVanBanDen = this.ConvertToVanBanDen(entityVanBanDi, entityNguoiKy, dataSoVanBanDen);
                    entityVanBanDen.IS_NOIBO = isSendInternal ? true : false;
                    HSCV_VANBANDENBusiness.Save(entityVanBanDen);

                    /**
                     * cập nhật số văn bản đến
                     */
                    dataSoVanBanDen.GHICHU = (dataSoVanBanDen.GHICHU.ToIntOrZero() + 1).ToString();
                    DM_DANHMUC_DATABusiness.Save(dataSoVanBanDen);

                    /**
                     * cập nhật tài liệu đính kèm
                     */
                    var files = this.GenerateFiles(groupFiles, entityVanBanDen);
                    groupForwardFiles.AddRange(files);

                    /**
                     * cập nhật thông tin văn bản đến trong luồng xử lý
                     */
                    if (processor != null)
                    {
                        WF_PROCESSBusiness.AddFlow(entityVanBanDen.ID, isSendInternal ? MODULE_CONSTANT.VANBANDENNOIBO : MODULE_CONSTANT.VANBANDEN, processor);
                    }

                    /**
                     * nếu không có người phù hợp trong luồng xử lý ==> lấy người có vai trò cao nhất tại phòng
                     */
                    if (processor == null)
                    {
                        /**
                         * lấy ra người có vai trò cao nhất tại phòng ban
                         */
                        processor = DM_NGUOIDUNGBusiness.GetUserHighestPriority(dept.ID);

                        /**
                         * lưu thông in người nhận vào bảng  WF_ITEM_USER_PROCESS
                         */
                        var itemUserProcess = new WF_ITEM_USER_PROCESS();
                        itemUserProcess.ITEM_ID      = entityVanBanDen.ID;
                        itemUserProcess.ITEM_TYPE    = isSendInternal ? MODULE_CONSTANT.VANBANDENNOIBO : MODULE_CONSTANT.VANBANDEN;
                        itemUserProcess.IS_XULYCHINH = false;
                        itemUserProcess.USER_ID      = processor.ID;
                        itemUserProcess.create_at    = DateTime.Now;
                        itemUserProcess.create_by    = currentUser.ID;
                        groupItemUserProcess.Add(itemUserProcess);
                    }


                    if (processor != null)
                    {
                        ElasticSearch.updateListUser(entityVanBanDen.ID.ToString(), new List <long> {
                            processor.ID
                        }, ElasticType.VanBanDen);

                        //gửi email
                        if (!string.IsNullOrEmpty(processor.EMAIL))
                        {
                            var ContentEmail = currentUser.TenPhongBan + " đã gửi bạn một văn bản đến <a href='" + SERVERADDRESS + "/HSCV_VANBANDENArea/HSCV_VANBANDEN/DetailVanBanDen?id=" + entityVanBanDen.ID.ToString() + "'>" + entityVanBanDen.SOHIEU + "</a>";
                            EmailProvider.SendMailTemplate(currentUser, ContentEmail, ContentEmail, new List <string> {
                                processor.EMAIL
                            });
                        }
                        //gửi tin nhắn
                        if (currentUser.CanSendSMS && entityVanBanDi.CAN_SEND_SMS == true && processor.DIENTHOAI != null)
                        {
                            var ContentSMS = currentUser.TenPhongBan + " đã gửi bạn một văn bản đến " + entityVanBanDen.SOHIEU;
                            ContentSMS = sms.locDau(ContentSMS);
                            var      DoDaiSMS = ContentSMS.Length;
                            string[] noiDung  = new string[1];
                            noiDung[0] = ContentSMS;
                            string resultsend = sms.guiTinNhan(processor.DIENTHOAI, "177403", noiDung);
                            LOGSMS SmsObject  = new LOGSMS();
                            SmsObject.SODIENTHOAINHAN = processor.DIENTHOAI;
                            SmsObject.NOIDUNG         = ContentSMS;
                            SmsObject.SOKYTU          = DoDaiSMS;
                            SmsObject.KETQUA          = resultsend;
                            SmsObject.CREATED_AT      = DateTime.Now;
                            SmsObject.CREATED_BY      = currentUser.ID;
                            SmsObject.HOTENNGUOIGUI   = currentUser.HOTEN;
                            SmsObject.DONVI_GUI       = currentUser.DM_PHONGBAN_ID.GetValueOrDefault();
                            SmsObject.ITEMTYPE        = "VANBANDEN";
                            SmsObject.ITEMID          = entityVanBanDen.ID;
                            SmsObject.DONVI_NHAN      = processor.DM_PHONGBAN_ID.GetValueOrDefault();
                            SmsObject.HOTENNGUOINHAN  = processor.HOTEN;
                            groupLogSMS.Add(SmsObject);
                        }

                        //lưu thông báo
                        SYS_TINNHAN noti = new SYS_TINNHAN();
                        noti.FROM_USERNAME = currentUser.HOTEN;
                        noti.FROM_USER_ID  = currentUser.ID;
                        noti.NGAYTAO       = DateTime.Now;
                        noti.NOIDUNG       = currentUser.TenPhongBan + " đã gửi đến bạn một văn bản đến";
                        noti.URL           = "/HSCV_VANBANDENArea/HSCV_VANBANDEN/DetailVanBanDen/" + entityVanBanDen.ID.ToString();
                        noti.TIEUDE        = "Xử lý văn bản đến";
                        noti.TO_USER_ID    = processor.ID;
                        SYS_TINNHANBusiness.Save(noti, "", false, entityVanBanDen.ID, TargetDocType.COORDINATED);
                    }
                }

                //lưu thông tin tài liệu, sms, luồng xử lý
                TAILIEUDINHKEMBusiness.repository.InsertRange(groupForwardFiles);
                LogSMSBusiness.repository.InsertRange(groupLogSMS);
                WF_ITEM_USER_PROCESSBusiness.repository.InsertRange(groupItemUserProcess);

                TAILIEUDINHKEMBusiness.repository.Save();
            }
            catch (Exception)
            {
                result = false;
            }
            return(result);
        }
Пример #20
0
        public static bool ValidateRequest(HttpContextBase httpContext)
        {
            // Write Authorize code here
            UserInfoBO UserInfo = (UserInfoBO)SessionManager.GetUserInfo();

            if (UserInfo == null)
            {
                FormsAuthentication.SignOut();
                SessionManager.Clear();
                httpContext.Response.Redirect("/Account/Login");
                return(true);
            }

            string username = httpContext.User.Identity.Name;

            var rd = httpContext.Request.RequestContext.RouteData;

            string currentAction     = rd.GetRequiredString("action");
            string currentController = rd.GetRequiredString("controller");
            string currentArea       = rd.DataTokens["area"] as string;

            string ActionPath      = string.Format("/{0}/{1}/{2}", currentArea, currentController, currentAction);
            string ActionPathShort = string.Format("/{0}/{1}", currentArea, currentController);

            UserInfoBO userinfo = (UserInfoBO)SessionManager.GetUserInfo();

            //if (ActionPath.ToLower() == "//Home/Index".ToLower())// nếu nhiều vai trò chưa chọn vai trò thì không được vào trang Index
            //{
            //    if (userinfo.RoleID < 1)
            //    {
            //        httpContext.Response.Redirect("/Home/OptionRole");
            //        return true;
            //    }
            //}
            //if (ActionPath.ToLower() == "//Home/OptionRole".ToLower())// nếu có 1 vai trò thì không được vào trang chọn vai trò
            //{
            //    if (userinfo.ListRole == null)
            //    {
            //        httpContext.Response.Redirect("/Home/UnAuthor");
            //        return true;
            //    }
            //}
            if (ActionPath == "//Home/Index" ||
                ActionPath == "//Home/UnAuthor" ||
                ActionPathShort == "//AttachFile" ||
                ActionPath == "//Account/ChangePassword")
            {
                return(true);
            }



            return(true);

            //commented by namdv
            //comment date: 09/06
            //reson: hệ thống kiểm tra thao tác có cho phép người dùng sử dụng hay không?
            List <ThaoTacBO> lstTT = userinfo.ListThaoTac;

            ThaoTacBO tt = lstTT.Where(o => o.THAOTAC.ToLower() == ActionPath.ToLower()).FirstOrDefault();

            if (tt == null)
            {
                return(false);
            }
            else
            {
                if (tt.listThoiGian.Count == 0)
                {
                    return(true);
                }

                DateTime currentTime = DateTime.Now;
                for (int i = 0; i < tt.listThoiGian.Count - 1; i = i + 2)
                {
                    bool pass = true;

                    DateTime?start = tt.listThoiGian[i];
                    DateTime?end   = tt.listThoiGian[i + 1];
                    if (end != null)
                    {
                        end = end.Value.AddDays(1);
                    }

                    if (start != null && start > currentTime)
                    {
                        pass = false;
                    }

                    if (end != null && end <= currentTime)
                    {
                        pass = false;
                    }

                    if (pass)
                    {
                        return(true);
                    }
                }

                return(false);
            }
        }
Пример #21
0
        public JsonResultBO AddFlow(long ItemId, string itemType, UserInfoBO userId, int customState = 0)
        {
            var result = new JsonResultBO(true);
            //Lấy thông tin module của loại đối tượng
            var module = this.context.WF_MODULE.Where(x => x.MODULE_CODE.Equals(itemType)).FirstOrDefault();

            if (module == null || module.WF_STREAM_ID == null)
            {
                result.MessageFail("Không tìm thấy luồng xử lý");
                return(result);
            }
            //Lấy thông tin luồng xử lý
            var DeptObj = this.context.CCTC_THANHPHAN.Find(userId.DM_PHONGBAN_ID);

            if (DeptObj == null)
            {
                result.MessageFail("Không tìm thấy luồng xử lý do chưa set đúng phòng ban");
                return(result);
            }

            var LstWFIds = module.WF_STREAM_ID.ToListInt(',');

            var flow = this.context.WF_STREAM.Where(x => x.LEVEL_ID == DeptObj.CATEGORY && LstWFIds.Contains(x.ID)).FirstOrDefault();

            if (flow == null)
            {
                result.MessageFail("Không tìm thấy luồng xử lý");
                return(result);
            }
            //Lấy danh sách bước
            var lstStep = this.context.WF_STATE.Where(x => x.WF_ID == flow.ID).OrderBy(x => x.ID).ToList();

            if (lstStep == null && !lstStep.Any())
            {
                result.MessageFail("Luồng xử lý chưa được cấu hình");
                return(result);
            }
            var stateID = GetState(flow.ID, userId);

            /*
             * @author: duynn
             * @description: "trạng thái" tùy chỉnh cho phép sử dụng trạng thái vượt cấp
             * */
            if (customState > 0)
            {
                stateID = customState;
            }

            var stateCurrent = this.context.WF_STATE.Find(stateID);

            var process = new WF_PROCESS();

            process.ITEM_ID            = ItemId;
            process.ITEM_TYPE          = itemType;
            process.USER_ID            = userId.ID;
            process.WF_ID              = flow.ID;
            process.CURRENT_STATE      = stateCurrent.ID;
            process.CURRENT_STATE_NAME = stateCurrent.STATE_NAME;
            if (customState > 0)
            {
                process.IS_END = stateCurrent.IS_KETTHUC.GetValueOrDefault();
            }
            this.Save(process);

            var userProcess = new WF_ITEM_USER_PROCESS();

            userProcess.ITEM_ID      = ItemId;
            userProcess.ITEM_TYPE    = itemType;
            userProcess.IS_XULYCHINH = true;
            userProcess.USER_ID      = userId.ID;
            userProcess.create_at    = DateTime.Now;
            userProcess.create_by    = userId.ID;
            if (customState > 0)
            {
                userProcess.DAXULY = true;
            }
            this.context.WF_ITEM_USER_PROCESS.Add(userProcess);
            var log = new WF_LOG();

            log.ITEM_ID      = process.ITEM_ID;
            log.ITEM_TYPE    = process.ITEM_TYPE;
            log.NGUOIXULY_ID = userId.ID;
            log.WF_ID        = process.WF_ID;
            if (customState > 0)
            {
                log.MESSAGE = "<div class='label label-info'>" + stateCurrent.STATE_NAME + "</div>";
            }
            else
            {
                log.MESSAGE = "<div class='label label-info'>Khởi tạo</div>";
            }
            log.STEP_ID   = null;
            log.create_at = DateTime.Now;
            log.create_by = userId.ID;
            this.context.WF_LOG.Add(log);

            if (customState > 0)
            {
                var function = this.context.WF_STATE_FUNCTION
                               .Where(x => x.WF_STATE_ID == customState)
                               .FirstOrDefault();
                if (function != null)
                {
                    var functionDone = new WF_FUNCTION_DONE();
                    functionDone.ITEM_TYPE      = itemType;
                    functionDone.ITEM_ID        = ItemId;
                    functionDone.STATE          = customState;
                    functionDone.FUNCTION_STATE = function.ID;
                    functionDone.create_at      = DateTime.Now;
                    functionDone.create_by      = userId.ID;
                    this.context.WF_FUNCTION_DONE.Add(functionDone);
                }
            }

            this.context.SaveChanges();
            return(result);
        }
Пример #22
0
 protected void AssignUserInfo()
 {
     currentUser = this.GetUserInfo();
 }
Пример #23
0
        /// <summary>
        /// @author:duynn
        /// @description: lấy danh sách phòng ban theo trang
        /// @since: 14/06/2019
        /// </summary>
        /// <param name="searchModel">thông tin tìm kiếm</param>
        /// <param name="user">người dùng hiện tại</param>
        /// <param name="pageIndex">thông tin trang hiện tại</param>
        /// <param name="pageSize">số bản ghi trên một trang</param>
        /// <returns></returns>
        public PageListResultBO<CCTC_THANHPHAN_BO> GetDataByPage(CCTC_THANHPHAN_SEARCHBO searchModel,
            UserInfoBO user,
            int pageIndex = 1,
            int pageSize = 20)
        {
            var query = from dept in this.context.CCTC_THANHPHAN
                        join users in this.context.DM_NGUOIDUNG
                        on dept.ID equals users.DM_PHONGBAN_ID
                        into groupUserDepts
                        join deptType in this.context.DM_LOAI_DONVI on dept.TYPE equals deptType.ID
                        into groupDeptType
                        from gDeptType in groupDeptType.DefaultIfEmpty()

                        join deptLevel in this.context.DM_DANHMUC_DATA
                        on dept.CATEGORY equals deptLevel.ID
                        into groupDeptLevel
                        from gDeptLevel in groupDeptLevel.DefaultIfEmpty()
                        select new CCTC_THANHPHAN_BO
                        {
                            ID = dept.ID,
                            CODE = dept.CODE,
                            ITEM_LEVEL = dept.ITEM_LEVEL,
                            NAME = dept.NAME,
                            PARENT_ID = dept.PARENT_ID,
                            TYPE = dept.TYPE,
                            THUTU = dept.THUTU,
                            SoLuongCanBo = groupUserDepts.Count(),
                            TenLoaiDonVi = gDeptType != null ? gDeptType.LOAI : string.Empty,
                            TenCapDonVi = gDeptLevel != null ? gDeptLevel.TEXT : string.Empty
                        };

            int deptId = 0;
            if (user.ListVaiTro.Any(x => x.MA_VAITRO == "QLHT"))
            {
                CCTC_THANHPHAN leaderDept = this.context.CCTC_THANHPHAN.Find(user.DM_PHONGBAN_ID.GetValueOrDefault());
                if (leaderDept != null)
                {
                    deptId = leaderDept.PARENT_ID.HasValue ? leaderDept.PARENT_ID.Value : leaderDept.ID;
                }
            }
            else if (user.ListVaiTro.Any(x => x.MA_VAITRO == "QLHT_HUYENUY") || user.ListVaiTro.Any(x => x.MA_VAITRO == "QLHT_XAPHUONG"))
            {
                if (user.DeptType == 10)
                {
                    deptId = user.DM_PHONGBAN_ID.GetValueOrDefault();
                }
                else
                {
                    deptId = user.DeptParentID.GetValueOrDefault();
                }
            }
            else
            {
                deptId = user.DM_PHONGBAN_ID.GetValueOrDefault();
            }

            //duynn lấy danh sách các phòng ban dưới cấp phòng ban hiện tại
            var tree = this.GetTree(deptId);

            query = query.Where(x => groupChildrenDepts.Contains(x.ID));

            if (searchModel != null)
            {
                if (!string.IsNullOrEmpty(searchModel.QR_MAPHONGBAN))
                {
                    query = query.Where(x => x.CODE.Contains(searchModel.QR_MAPHONGBAN));
                }
                if (!string.IsNullOrEmpty(searchModel.QR_TENPHONGBAN))
                {
                    query = query.Where(x => x.NAME.Contains(searchModel.QR_TENPHONGBAN));

                }
                if (searchModel.QR_LOAIPHONGBAN.HasValue)
                {
                    query = query.Where(x => x.TYPE == searchModel.QR_LOAIPHONGBAN);
                }

                if (searchModel.QR_CAPPHONGBAN.HasValue)
                {
                    query = query.Where(x => x.ITEM_LEVEL == searchModel.QR_CAPPHONGBAN);
                }

                if (!string.IsNullOrEmpty(searchModel.sortQuery))
                {
                    query = query.OrderBy(searchModel.sortQuery);
                }
                else
                {
                    query = query.OrderBy(x => x.ID);
                }
            }
            else
            {
                query = query.OrderBy(x => x.ID);
            }
            var result = new PageListResultBO<CCTC_THANHPHAN_BO>();
            if (pageSize == -1)
            {
                var pagedList = query.ToList();
                result.Count = pagedList.Count;
                result.TotalPage = 1;
                result.ListItem = pagedList;
            }
            else
            {
                var pagedList = query.ToPagedList(pageIndex, pageSize);
                result.Count = pagedList.TotalItemCount;
                result.TotalPage = pagedList.PageCount;
                result.ListItem = pagedList.ToList();
            }
            return 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);
        }