Наследование: ValueObjectBase
        /// <summary>
        /// 그룹 정보 조회를 위한 <see cref="QueryOver"/>를 빌드합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <param name="code"></param>
        /// <param name="kind"></param>
        /// <param name="name"></param>
        /// <param name="isActive"></param>
        /// <returns></returns>
        public static QueryOver<Group, Group> BuildQueryOverOfGroup(Company company,
                                                                    string code = null,
                                                                    GroupKinds? kind = null,
                                                                    string name = null,
                                                                    bool? isActive = null)
        {
            if(IsDebugEnabled)
                log.Debug(@"그룹 정보 조회를 위한 QueryOver 를 빌드합니다... company={0}, code={1} kind={2}, name={3}, isActive={4}",
                          company, code, kind, name, isActive);

            var query = QueryOver.Of<Group>();

            if(company != null)
                query.AddWhere(g => g.Company == company);

            if(code.IsNotWhiteSpace())
                query.AddWhere(g => g.Code == code);

            if(kind.HasValue)
                query.AddWhere(g => g.Kind == kind.Value);

            if(name.IsNotWhiteSpace())
                query.AddWhere(g => g.Name == name);

            if(isActive.HasValue)
                query.AddNullAsTrue(g => g.IsActive, isActive);

            return query;
        }
Пример #2
0
        /// <summary>
        /// 즐겨찾기를 위한 질의 객체 (<see cref="DetachedCriteria"/>)를 빌드합니다.
        /// </summary>
        /// <param name="product">지정된 제품, null이면 검색조건에서 제외합니다.</param>
        /// <param name="company">지정된 회사, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerCode">소유자 코드, null이면 검색조건에서 제외합니다.</param>
        /// <param name="ownerKind">소유자 종류, <see cref="ActorKinds.Unknown"/>이면 검색조건에서 제외합니다.</param>
        /// <param name="registerCode">등록자 코드</param>
        /// <param name="registTimeRange">등록일 검색 범위</param>
        /// <returns></returns>
        public virtual QueryOver<Favorite, Favorite> BuildQueryOverOfFavorite(Product product,
                                                                              Company company,
                                                                              string ownerCode,
                                                                              ActorKinds? ownerKind = null,
                                                                              string registerCode = null,
                                                                              ITimePeriod registTimeRange = null)
        {
            if(IsDebugEnabled)
                log.Debug(@"즐겨찾기 조회를 위한 QueryOver를 생성합니다... " +
                          @"company={0}, product={1}, ownerCode={2}, ownerKind={3}, registerCode={4}, registTimeRange={5}",
                          company, product, ownerCode, ownerKind, registerCode, registTimeRange);

            var query = QueryOver.Of<Favorite>();

            if(product != null)
                query.AddWhere(f => f.ProductCode == product.Code);

            if(company != null)
                query.AddWhere(f => f.CompanyCode == company.Code);

            if(ownerCode.IsNotWhiteSpace())
                query.AddWhere(f => f.OwnerCode == ownerCode);

            if(ownerKind.HasValue)
                query.AddWhere(f => f.OwnerKind == ownerKind.Value);

            if(registerCode.IsNotWhiteSpace())
                query.AddWhere(f => f.RegisterCode == registerCode);

            if(registTimeRange != null && registTimeRange.IsAnytime == false)
                query.AddBetween(f => f.RegistDate, registTimeRange.StartAsNullable, registTimeRange.EndAsNullable);

            return query;
        }
 /// <summary>
 /// 그룹 정보 조회를 위한 <see cref="DetachedCriteria"/>를 빌드합니다.
 /// </summary>
 public static DetachedCriteria BuildCriteriaOfGroup(Company company,
                                                     string code = null,
                                                     GroupKinds? kind = null,
                                                     string name = null,
                                                     bool? isActive = null)
 {
     return BuildQueryOverOfGroup(company, code, kind, name, isActive).DetachedCriteria;
 }
        /// <summary>
        /// 사원 직책 정보를 생성합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <param name="code"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public EmployeeTitle CreateEmployeeTitle(Company company, string code, string name)
        {
            var title = new EmployeeTitle(company, code) {Name = name};

            if(IsDebugEnabled)
                log.Debug("새로운 EmployeeTitle을 생성합니다... " + title);

            return Repository<EmployeeTitle>.SaveOrUpdate(title);
        }
        /// <summary>
        /// 사원 직위 정보를 생성합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <param name="code"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public EmployeePosition CreateEmployeePosition(Company company, string code, string name)
        {
            var position = new EmployeePosition(company, code) {Name = name};

            if(IsDebugEnabled)
                log.Debug("새로운 EmployeePosition를 생성합니다... " + position);

            return Repository<EmployeePosition>.SaveOrUpdate(position);
        }
        /// <summary>
        /// 새로운 직급 정보를 생성합니다.
        /// </summary>
        public EmployeeGrade CreateEmployeeGrade(Company company, string code, string name)
        {
            var grade = new EmployeeGrade(company, code) {Name = name};

            if(IsDebugEnabled)
                log.Debug(@"새로운 직급 정보를 생성합니다... " + grade);

            return Repository<EmployeeGrade>.SaveOrUpdate(grade);
        }
        /// <summary>
        /// 지정한 Company 정보를 삭제합니다.
        /// </summary>
        /// <param name="company"></param>
        public void DeleteCompany(Company company)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug(@"Company를 삭제합니다... company=" + company);

            DeleteEntityTransactional(company);

            if(log.IsInfoEnabled)
                log.Info(@"Company를 삭제했습니다!!! company=" + company);
        }
Пример #8
0
        /// <summary>
        /// 사용자 로그인 계정 정보로 사용자를 인증합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <param name="loginId"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public bool AuthenticateUser(Company company, string loginId, string password)
        {
            company.ShouldNotBeNull("company");
            loginId.ShouldNotBeWhiteSpace("loginId");
            // password.ShouldNotBeWhiteSpace("password");

            if(log.IsDebugEnabled)
                log.Debug(@"사용자 인증을 실시합니다... companyId={0}, loginId={1}, password={2}", company.Id, loginId, password);

            return BuildQueryableOfUser(company, loginId, password).Any();

            //return NAccessContext.Linq.Users.Any(u => u.Company == company &&
            //                                          u.LoginId == loginId &&
            //                                          u.Password == password);
        }
Пример #9
0
        /// <summary>
        /// 사용자 (<see cref="User"/>) 정보를 조회하기 위한 IQueryable{User} 를 빌드합니다.
        /// </summary>
        public IQueryable<User> BuildQueryableOfUser(Company company, string loginId, string password = null)
        {
            var query = Repository<User>.Session.Query<User>();

            if(company != null)
                query = query.AddWhere(u => u.Company == company);

            if(loginId.IsNotWhiteSpace())
                query = query.AddWhere(u => u.LoginId == loginId);

            if(password.IsNotWhiteSpace())
                query = query.AddWhere(u => u.Password == password);

            return query;
        }
        /// <summary>
        /// 지정된 회사의 모든 사원 직급 정보를 가져옵니다.
        /// </summary>
        public IList<EmployeeGrade> FindAllEmployeeGradeByCompany(Company company, int? firstResult, int? maxResults, params INHOrder<EmployeeGrade>[] orders)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug(@"사원 직급 정보(EmployeeGrade)를 조회합니다. company=" + company);

            var query =
                QueryOver.Of<EmployeeGrade>()
                    .AddWhere(g => g.Company == company)
                    .AddOrders(orders);

            return Repository<EmployeeGrade>.FindAll(query,
                                                     firstResult.GetValueOrDefault(),
                                                     maxResults.GetValueOrDefault());
        }
Пример #11
0
        /// <summary>
        /// 사용자 (<see cref="User"/>) 정보를 조회하기 위한 IQueryable{User} 를 빌드합니다.
        /// </summary>
        public IQueryable<User> BuildQueryableOfUser(Company company,
                                                     Department department = null,
                                                     string code = null,
                                                     string name = null,
                                                     int? kind = null,
                                                     string loginId = null,
                                                     string password = null,
                                                     string empNo = null)
        {
            var query = Repository<User>.Session.Query<User>();

            if(company != null)
                query = query.AddWhere(u => u.Company == company);

            if(department != null)
            {
                var userInDepts =
                    NAccessContext.Linq.DepartmentMembers
                        .Where(m => m.Department == department)
                        .Select(m => m.User.Id)
                        .Distinct()
                        .ToList();

                query = query.AddWhere(u => userInDepts.Contains(u.Id));
            }
            if(code.IsNotWhiteSpace())
                query = query.AddWhere(u => u.Code == code);

            if(name.IsNotWhiteSpace())
                query = query.AddWhere(u => u.Name == name);

            if(kind.HasValue)
                query = query.AddWhere(u => u.Kind == kind.Value);

            if(loginId.IsNotWhiteSpace())
                query = query.AddWhere(u => u.LoginId == loginId);

            if(password.IsNotWhiteSpace())
                query = query.AddWhere(u => u.Password == password);

            if(empNo.IsNotWhiteSpace())
                query = query.AddWhere(u => u.EmpNo == empNo);

            return query;
        }
Пример #12
0
        /// <summary>
        /// 로그인 정보를 가진 사용자 정보를 로드합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <param name="loginId"></param>
        /// <param name="password"></param>
        /// <returns>반환되는 User 정보가 있다면, 로그인 성공, 없다면 비밀번호가 틀렸다는 의미이다.</returns>
        public User FindOneUserByLogin(Company company, string loginId, string password)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug("사용자 계정으로 검색을 실시합니다... company.Code={0}, loginId={1}, password={2}", company.Code, loginId, password);

            var query =
                QueryOver.Of<User>()
                    .AddWhere(u => u.Company == company)
                    .AddWhere(u => u.LoginId == loginId);

            if(password.IsNotEmpty())
                query.AddWhere(u => u.Password == password);

            return Repository<User>.FindOne(query);
        }
Пример #13
0
        /// <summary>
        /// 지정한 회사의 사원 정보를 로드합니다. 만약 없다면, 새로 생성해서 저장한 후 로드 합니다. (그냥 Load 시에는 <see cref="FindOneUserByCode"/>로 호출하시기 바랍니다.
        /// </summary>
        public User GetOrCreateUser(Company company, string code)
        {
            company.ShouldNotBeNull("company");
            code.ShouldNotBeWhiteSpace("code");

            var user = FindOneUserByCode(company, code);

            if(user != null)
                return user;

            if(IsDebugEnabled)
                log.Debug(@"지정된 회사[{0}]에 사용자[{1}]가 없습니다. 새로 생성합니다.", company.Code, code);

            lock(_syncLock)
            {
                using(UnitOfWork.Start(UnitOfWorkNestingOptions.CreateNewOrNestUnitOfWork))
                {
                    Repository<User>.Save(new User(company, code));
                    UnitOfWork.CurrentSession.Flush();
                }
            }

            user = FindOneUserByCode(company, code);
            user.AssertExists("user");

            if(log.IsInfoEnabled)
                log.Info("새로운 User 정보를 생성했습니다!!! New User = " + user);

            return user;
        }
Пример #14
0
        /// <summary>
        /// 사번으로 직원 찾기
        /// </summary>
        /// <param name="company"></param>
        /// <param name="empNo"></param>
        /// <returns></returns>
        public User FindOneUserByEmpNo(Company company, string empNo)
        {
            company.ShouldNotBeNull("company");
            empNo.ShouldNotBeWhiteSpace("empNo");

            if(IsDebugEnabled)
                log.Debug("특정 사번의 사용자 정보를 조회합니다. Company={0}, empNo={1}", company, empNo);

            return
                NAccessContext.Linq.Users
                    .Where(u => u.Company == company &&
                                u.EmpNo == empNo)
                    .SingleOrDefault();
        }
Пример #15
0
 /// <summary>
 /// 로그인 계정을 가진 사용자 정보를 로드합니다.
 /// </summary>
 /// <param name="company"></param>
 /// <param name="loginId"></param>
 /// <returns></returns>
 public User FindOneUserByLogin(Company company, string loginId)
 {
     return FindOneUserByLogin(company, loginId, null);
 }
Пример #16
0
 /// <summary>
 /// 지정한 코드 그룹의 코드 정보들을 조회합니다.
 /// </summary>
 /// <param name="company">회사</param>
 /// <param name="groupCode">그룹 코드</param>
 /// <returns></returns>
 public IList<Code> FindAllCodeByGroup(Company company, string groupCode)
 {
     return FindAllCodeByGroup(company, groupCode, null, null);
 }
Пример #17
0
        /// <summary>
        /// 특정 회사의 모든 코드 정보를 조회합니다.
        /// </summary>
        /// <param name="company">회사</param>
        /// <param name="firstResult">첫번째 결과 셋의 인덱스 (0부터 시작. null이면 0으로 간주)</param>
        /// <param name="maxResults">결과 셋의 최대 레코드 수 (null 또는 0 이하의 값은 무시된다)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IList<Code> FindAllCodeByCompany(Company company, int? firstResult, int? maxResults, params INHOrder<Code>[] orders)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug(@"특정 회사의 모든 코드 정보를 조회합니다... " +
                          @"companyCode={0}, firstResult={1}, maxResults={2}, orders={3}",
                          company.Code, firstResult, maxResults, orders.CollectionToString());

            var query = QueryOver.Of<Code>().AddWhere(c => c.Group.CompanyCode == company.Code).AddOrders(orders);

            return Repository<Code>.FindAll(query,
                                            firstResult.GetValueOrDefault(),
                                            maxResults.GetValueOrDefault());
        }
Пример #18
0
        /// <summary>
        /// 지정된 회사의 모든 사용자 정보를 조회합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <returns></returns>
        public IList<User> FindAllUserByCompany(Company company)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug(@"지정된 회사의 모든 사용자 정보를 조회합니다... companyCode=" + company.Code);

            return NAccessContext.Linq.Users.Where(u => u.Company == company).ToList();
        }
Пример #19
0
        /// <summary>
        /// <see cref="Calendar"/> 조회를 위한 Criteria를 빌드합니다.
        /// </summary>
        /// <param name="code">Calendar 고유 코드</param>
        /// <param name="projectId">관련 Proejct의 고유 ID</param>
        /// <param name="resourceId">관련 리소스의 고유 ID</param>
        /// <param name="company">Calendar 적용 회사</param>
        /// <param name="name">Calendar 명</param>
        /// <returns></returns>
        public QueryOver<Calendar, Calendar> BuildQueryOverOfCalendar(string code, string projectId, string resourceId, Company company, string name)
        {
            if(log.IsDebugEnabled)
                log.Debug(@"Calendar 정보 검색을 위한 Criteria를 빌드합니다... " +
                          @"code={0}, projectId={1}, resourceId={2}, company={3}, name={4}",
                          code, projectId, resourceId, company, name);

            var query = QueryOver.Of<Calendar>();

            if(code.IsNotWhiteSpace())
                query.AddWhere(c => c.Code == code);

            if(projectId.IsNotWhiteSpace())
                query.AddWhere(c => c.ProjectId == projectId);

            if(resourceId.IsNotWhiteSpace())
                query.AddWhere(c => c.ResourceId == resourceId);

            if(company != null)
                query.AddWhere(c => c.CompanyCode == company.Code);

            if(name.IsNotWhiteSpace())
                query.AddWhere(c => c.Name == name);

            return query;
        }
Пример #20
0
        /// <summary>
        /// 사용자 (<see cref="User"/>) 정보를 조회하기 위한 QueryOver{User, User}를 빌드합니다.
        /// </summary>
        public QueryOver<User, User> BuildQueryOverOfUser(Company company, string loginId, string password = null)
        {
            var query = QueryOver.Of<User>();
            if(company != null)
                query.AddWhere(u => u.Company == company);

            if(loginId.IsNotWhiteSpace())
                query.AddWhere(u => u.LoginId == loginId);

            if(password.IsNotWhiteSpace())
                query.AddWhere(u => u.Password == password);

            return query;
        }
Пример #21
0
        /// <summary>
        /// 사용자 (<see cref="User"/>) 정보를 조회하기 위한 QueryOver{User, User}를 빌드합니다.
        /// </summary>
        public QueryOver<User, User> BuildQueryOverOfUser(Company company,
                                                          Department department = null,
                                                          string code = null,
                                                          string name = null,
                                                          int? kind = null,
                                                          string loginId = null,
                                                          string password = null,
                                                          string empNo = null)
        {
            var query = QueryOver.Of<User>();

            if(company != null)
                query.AddWhere(u => u.Company == company);

            if(department != null)
            {
                var userInDeptQuery =
                    QueryOver.Of<DepartmentMember>()
                        .AddWhere(m => m.Department == department)
                        .Select(Projections.Group<DepartmentMember>(m => m.User.Id));

                query.WithSubquery.WhereProperty(u => u.Id).In(userInDeptQuery);
            }
            if(code.IsNotWhiteSpace())
                query.AddWhere(u => u.Code == code);

            if(name.IsNotWhiteSpace())
                query.AddWhere(u => u.Name == name);

            if(kind.HasValue)
                query.AddWhere(u => u.Kind == kind.Value);

            if(loginId.IsNotWhiteSpace())
                query.AddWhere(u => u.LoginId == loginId);

            if(password.IsNotWhiteSpace())
                query.AddWhere(u => u.Password == password);

            if(empNo.IsNotWhiteSpace())
                query.AddWhere(u => u.EmpNo == empNo);

            return query;
        }
Пример #22
0
 /// <summary>
 /// 특정 회사의 모든 코드 정보를 조회합니다.
 /// </summary>
 /// <param name="company">회사</param>
 /// <returns></returns>
 public IList<Code> FindAllCodeByCompany(Company company)
 {
     return FindAllCodeByCompany(company, null, null);
 }
Пример #23
0
 /// <summary>
 /// 코드 Identity 값으로부터 코드 정보를 조회합니다.
 /// </summary>
 /// <param name="company">회사</param>
 /// <param name="groupCode">그룹 코드</param>
 /// <param name="itemCode">아이템 코드</param>
 /// <returns></returns>
 public Code FindOneCodeByCode(Company company, string groupCode, string itemCode)
 {
     company.ShouldNotBeNull("company");
     return FindOneCodeByCode(company.Code, groupCode, itemCode);
 }
Пример #24
0
 /// <summary>
 /// 지정된 회사의 코드 그룹 정보를 가져온다.
 /// </summary>
 /// <param name="company">회사</param>
 /// <returns></returns>
 public IList<CodeGroup> FindAllCodeGroupByCompany(Company company)
 {
     company.ShouldNotBeNull("company");
     return FindAllCodeGroupByCompany(company.Code);
 }
Пример #25
0
        /// <summary>
        /// 지정된 회사의 모든 사용자 정보를 Paging 처리하여 로드합니다
        /// </summary>
        /// <param name="company">회사</param>
        /// <param name="pageIndex">페이지 인덱스 (0부터 시작)</param>
        /// <param name="pageSize">페이지 크기 (0보다 커야 한다. 보통 10)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IPagingList<User> GetPageOfUserByCompany(Company company, int pageIndex, int pageSize, params INHOrder<User>[] orders)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug(@"지정된 회사의 모든 사용자 정보를 Paging 처리하여 로드합니다... company={0}, pageIndex={1}, pageSize={2}, orders={3}",
                          company.Code, pageIndex, pageSize, orders.CollectionToString());

            return Repository<User>.GetPage(pageIndex,
                                            pageSize,
                                            QueryOver.Of<User>().AddWhere(u => u.Company == company),
                                            orders);
        }
Пример #26
0
        /// <summary>
        /// 지정된 회사에서, 지정된 이름과 매칭되는 (LIKE 검색) 사용자 정보를 조회합니다.
        /// </summary>
        /// <param name="company"></param>
        /// <param name="nameToMatch"></param>
        /// <param name="matchMode"></param>
        /// <returns></returns>
        public IList<User> FindAllUserByCompanyAndNameToMatch(Company company, string nameToMatch, MatchMode matchMode)
        {
            company.ShouldNotBeNull("company");

            if(IsDebugEnabled)
                log.Debug("사용자 이름과 매칭 검색을 수행합니다. nameToMatch={0}, matchMode={1}", nameToMatch, matchMode);

            var query =
                QueryOver.Of<User>()
                    .AddWhere(u => u.Company == company)
                    .AddInsensitiveLike(u => u.Name, nameToMatch, matchMode ?? MatchMode.Anywhere);

            return Repository<User>.FindAll(query);
        }
Пример #27
0
 /// <summary>
 /// 사용자 (<see cref="User"/>) 정보를 조회하기 위한 Criteria를 빌드합니다.
 /// </summary>
 public DetachedCriteria BuildCriteriaOfUser(Company company, Department department, string code, string name, int? kind, string loginId, string password,
                                             string empNo)
 {
     return BuildQueryOverOfUser(company, department, code, name, kind, loginId, password, empNo).DetachedCriteria;
 }
Пример #28
0
        /// <summary>
        /// 특정 사용자 정보를 Load합니다.
        /// </summary>
        public User FindOneUserByCode(Company company, string code)
        {
            company.ShouldNotBeNull("company");
            code.ShouldNotBeWhiteSpace("code");

            if(IsDebugEnabled)
                log.Debug(@"사용자 정보를 조회합니다. Company={0}, code={1}", company.Id, code);

            return
                NAccessContext.Linq.Users
                    .Where(u => u.Company == company &&
                                u.Code == code)
                    .SingleOrDefault();
        }
Пример #29
0
 /// <summary>
 /// 지정된 코드를 조회한다. 없다면, 새로 생성하여 저장한 후, 반환한다.
 /// </summary>
 /// <param name="company">회사</param>
 /// <param name="groupCode">그룹 코드</param>
 /// <param name="itemCode">아이템 코드</param>
 /// <returns></returns>
 public Code GetOrCreateCode(Company company, string groupCode, string itemCode)
 {
     company.ShouldNotBeNull("company");
     return GetOrCreateCode(company.Code, groupCode, itemCode);
 }
Пример #30
0
        /// <summary>
        /// 지정한 코드 그룹의 코드 정보들을 조회합니다.
        /// </summary>
        /// <param name="company">회사</param>
        /// <param name="groupCode">그룹 코드</param>
        /// <param name="firstResult">첫번째 결과 셋의 인덱스 (0부터 시작. null이면 0으로 간주)</param>
        /// <param name="maxResults">결과 셋의 최대 레코드 수 (null 또는 0 이하의 값은 무시된다)</param>
        /// <param name="orders">정렬 순서</param>
        /// <returns></returns>
        public IList<Code> FindAllCodeByGroup(Company company, string groupCode, int? firstResult, int? maxResults, params INHOrder<Code>[] orders)
        {
            company.ShouldNotBeNull("company");
            groupCode.ShouldNotBeWhiteSpace("groupCode");

            if(IsDebugEnabled)
                log.Debug(@"지정한 코드 그룹의 코드 정보들을 조회합니다... " +
                          @"companyCode={0}, groupCode={1}, firstResult={2}, maxResults={3}, orders={4}",
                          company.Code, groupCode, firstResult, maxResults, orders.CollectionToString());

            var query = BuildQueryOverOfCode(company.Code, groupCode, null, null, null, null).AddOrders(orders);

            return Repository<Code>.FindAll(query,
                                            firstResult.GetValueOrDefault(),
                                            maxResults.GetValueOrDefault());
        }