Exemplo n.º 1
0
        public IEnumerable <ResourceUserRightModel> GetDelegatedRightsOnDate(DateTime date,
                                                                             int?idRequestUser, string department, string unit, int?idResource)
        {
            var toDate   = date;
            var fromDate = date.Date.AddDays(1);

            return((from rightAssoc in _rightRepository.GetRequestUserRightAssocs()
                    join userAssoc in _rightRepository.GetRequestUserAssocs()
                    on rightAssoc.IdRequestUserAssoc equals userAssoc.IdRequestUserAssoc
                    join requestUser in _rightRepository.GetRequestUsers()
                    on userAssoc.IdRequestUser equals requestUser.IdRequestUser
                    join resourceRight in _rightRepository.GetResourceRights()
                    on rightAssoc.IdResourceRight equals resourceRight.IdResourceRight
                    join delegation in _rightRepository.GetDelegationRequestUsersExtInfo()
                    on userAssoc.IdRequestUserAssoc equals delegation.IdRequestUserAssoc
                    join delegationUser in _rightRepository.GetRequestUsers()
                    on delegation.IdDelegateToUser equals delegationUser.IdRequestUser
                    where rightAssoc.IdRequestRightGrantType == 3 && rightAssoc.GrantedFrom < fromDate &&
                    (rightAssoc.GrantedTo == null || rightAssoc.GrantedTo > toDate) &&
                    (idRequestUser == null || requestUser.IdRequestUser == idRequestUser.Value ||
                     delegation.IdDelegateToUser == idRequestUser.Value) &&
                    (department == null || requestUser.Department == department ||
                     delegationUser.Department == department) &&
                    (unit == null || requestUser.Unit == unit || delegationUser.Unit == unit) &&
                    (idResource == null || rightAssoc.ResourceRight.IdResource == idResource.Value)
                    group new { rightAssoc.GrantedFrom, rightAssoc.GrantedTo } by
                    new
            {
                IdRequestFromUser = requestUser.IdRequestUser,
                RequestUserFromSnp = requestUser.Snp,
                RequestUserFromDepartment = requestUser.Department,
                RequestUserFromUnit = requestUser.Unit,

                delegation.IdDelegateToUser,
                DelegateToUserSnp = delegationUser.Snp,
                DelegateToUserDepartment = delegationUser.Department,
                DelegateToUserUnit = delegationUser.Unit,

                resourceRight.IdResourceRight,
                ResourceRightName = resourceRight.Name,
                ResourceRightDescription = resourceRight.Description,
                resourceRight.IdResource,
                ResourceName = resourceRight.Resource.Name,
                ResourceDescription = resourceRight.Resource.Description,
            }
                    into gs
                    select new ResourceUserRightModel
            {
                IdRequestUser = gs.Key.IdDelegateToUser,
                RequestUserSnp = gs.Key.DelegateToUserSnp,
                RequestUserDepartment = gs.Key.DelegateToUserDepartment,
                RequestUserUnit = gs.Key.DelegateToUserUnit,
                IdResourceRight = gs.Key.IdResourceRight,
                ResourceRightName = gs.Key.ResourceRightName,
                ResourceRightDescription = gs.Key.ResourceRightDescription,
                IdResource = gs.Key.IdResource,
                ResourceName = gs.Key.ResourceName,
                ResourceDescription = gs.Key.ResourceDescription,
                RightCategory = "Делегированное право",
                IdDelegateFromUser = gs.Key.IdRequestFromUser,
                DelegateFromUserSnp = gs.Key.RequestUserFromSnp,
                DelegateFromUserDepartment = gs.Key.RequestUserFromDepartment,
                DelegateFromUserUnit = gs.Key.RequestUserFromUnit,
                DateDelegateFrom = gs.Select(r => r.GrantedFrom).Min(),
                DateDelegateTo = gs.Select(r => r.GrantedTo).Max()
            }).ToList());
        }