protected virtual void Setup(AccountSearchBaseRequest accountSearch) { Surname = accountSearch.Surname; DateOfBirth = accountSearch.DateOfBirth; Reference = accountSearch.BreathingSpaceReference; IsRefValid = !string.IsNullOrEmpty(Reference); IsSurnameValid = !string.IsNullOrEmpty(Surname); IsDobValid = DateOfBirth.Date != DateTime.Today.Date && DateOfBirth != default; }
public async Task <IEnumerable <AccountSearchResponse> > SearchAccountsAsync(AccountSearchBaseRequest searchParam, Guid organisationId) { Setup(searchParam); if (!IsSearchValid) { return(Enumerable.Empty <AccountSearchResponse>()); } var debtors = await Client.For <Ntt_breathingspacedebtor>() .Expand(x => x.ntt_breathingspacedebtor_inss_inssaddress) .Expand(x => x.Ntt_breathingspacedebtor_ntt_breathingspacemoratorium_debtorid) .Filter(GetSearchQuery()) .OrderBy(x => x.ntt_lastname) .FindEntriesAsync(); debtors = debtors.ToList(); if (!debtors.Any()) { return(Enumerable.Empty <AccountSearchResponse>()); } var moratoriums = await Client.For <__Ntt_breathingspacemoratorium>() .Expand(m => m.ntt_breathingspacetypeid) .Expand(m => m.ntt_ManagingMoneyAdviserOrganisationId) .WhereInFilter(x => x.ntt_breathingspacemoratoriumid, debtors.SelectMany(d => d.GetMoratoriumIds()).ToList()) .FindEntriesAsync(); var moratoriumsByDebtorId = moratoriums .GroupBy(x => x._ntt_debtorid_value) .ToDictionary(g => g.Key, g => g.ToList()); var indexDebtors = debtors.ToDictionary(x => x.GetId(), x => x); moratoriumsByDebtorId.ToList() .ForEach(x => indexDebtors[x.Key.Value].Ntt_breathingspacedebtor_ntt_breathingspacemoratorium_debtorid = x.Value.Select(y => y.MapToDynamicOriginal()).ToList()); var results = debtors .Where(x => x.Ntt_breathingspacedebtor_ntt_breathingspacemoratorium_debtorid .Any(y => y._ntt_managingmoneyadviserorganisationid_value == organisationId || y.GetMoratoriumStatus() != MoratoriumStatus.Draft)) .SelectMany( (debtor) => debtor.Ntt_breathingspacedebtor_ntt_breathingspacemoratorium_debtorid, (debtor, moratorium) => { var searchResult = new AccountSearchResponse(); var isAddressHidden = debtor.Ntt_addresswithheld ?? false; var isManagingOrganisation = moratorium._ntt_managingmoneyadviserorganisationid_value == organisationId; _mapperService.SetAccountSearchResult(searchResult, debtor, moratorium); if (!isManagingOrganisation && isAddressHidden) { searchResult.Address = null; } return(searchResult); }) .ToList(); return(results); }