示例#1
0
        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;
        }
示例#2
0
        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);
        }