Beispiel #1
0
        public async Task <ActionResult> SearchOrganizationUsersAsync([FromBody] OrganizationContactsSearchCriteria searchCriteria)
        {
            searchCriteria.OrganizationId = searchCriteria.OrganizationId ?? WorkContext.CurrentUser?.Contact?.Organization?.Id;
            //Allow to register new users only within own organization
            var authorizationResult = await _authorizationService.AuthorizeAsync(User, new Organization { Id = searchCriteria.OrganizationId }, CanEditOrganizationResourceAuthorizeRequirement.PolicyName);

            if (!authorizationResult.Succeeded)
            {
                return(Unauthorized());
            }
            if (searchCriteria.OrganizationId != null)
            {
                var contactsSearchResult = await _memberService.SearchOrganizationContactsAsync(searchCriteria);

                var userIds = contactsSearchResult.Select(x => x.SecurityAccounts?.FirstOrDefault()).OfType <SecurityAccount>().Select(x => x.Id);
                var users   = new List <User>();
                foreach (var userId in userIds)
                {
                    var user = await _userManager.FindByIdAsync(userId);

                    if (user != null)
                    {
                        users.Add(user);
                    }
                }
                return(Json(new { TotalCount = contactsSearchResult.TotalItemCount, Results = users }));
            }
            return(Ok());
        }
        public async Task <IPagedList <Contact> > SearchOrganizationContactsAsync(OrganizationContactsSearchCriteria criteria)
        {
            var criteriaDto = new customerDto.MembersSearchCriteria
            {
                MemberId     = criteria.OrganizationId,
                Skip         = (criteria.PageNumber - 1) * criteria.PageSize,
                Take         = criteria.PageSize,
                Sort         = criteria.Sort,
                SearchPhrase = criteria.SearchPhrase
            };

            var searchResult = await _customerApi.SearchAsync(criteriaDto);

            var contacts = _customerApi.GetContactsByIds(searchResult.Results.Select(x => x.Id).ToList()).Select(x => x.ToContact()).ToList();

            return(new StaticPagedList <Contact>(contacts, criteria.PageNumber, criteria.PageSize, searchResult.TotalCount.Value));
        }
        public async Task <Organization> GetOrganizationByIdAsync(string organizationId)
        {
            Organization result   = null;
            var          cacheKey = CacheKey.With(GetType(), "GetOrganizationByIdAsync", organizationId);
            var          dto      = await _memoryCache.GetOrCreateExclusiveAsync(cacheKey, async (cacheEntry) =>
            {
                var organizationDto = await _customerApi.GetOrganizationByIdAsync(organizationId);
                if (organizationDto != null)
                {
                    cacheEntry.AddExpirationToken(CustomerCacheRegion.CreateChangeToken(organizationDto.Id));
                    cacheEntry.AddExpirationToken(_apiChangesWatcher.CreateChangeToken());
                }
                return(organizationDto);
            });

            if (dto != null)
            {
                result = dto.ToOrganization();

                //Lazy load organization contacts
                result.Contacts = new MutablePagedList <Contact>((pageNumber, pageSize, sortInfos, @params) =>
                {
                    var criteria = new OrganizationContactsSearchCriteria
                    {
                        OrganizationId = result.Id,
                        PageNumber     = pageNumber,
                        PageSize       = pageSize
                    };
                    if (!sortInfos.IsNullOrEmpty())
                    {
                        criteria.Sort = SortInfo.ToString(sortInfos);
                    }
                    if (@params != null)
                    {
                        criteria.CopyFrom(@params);
                    }
                    return(SearchOrganizationContacts(criteria));
                }, 1, 20);
            }
            return(result);
        }
 public IPagedList <Contact> SearchOrganizationContacts(OrganizationContactsSearchCriteria criteria)
 {
     return(SearchOrganizationContactsAsync(criteria).GetAwaiter().GetResult());
 }
 public IPagedList <Contact> SearchOrganizationContacts(OrganizationContactsSearchCriteria criteria)
 {
     return(Task.Factory.StartNew(() => SearchOrganizationContactsAsync(criteria), CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult());
 }