public async Task <IEnumerable <GrantDisbursementSchemesDto> > GetGrantDisbursements(ICollection <Household> households) { var result = new List <GrantDisbursementSchemesDto>(); var scheme = new GrantDisbursementSchemesDto { Scheme = "Family Togetherness Scheme", EligibleHouseholds = households .Where(p => p.IsSpouseLivingTogether) .Where(p => p.FamilyMembers.Any(f => f.Age < 18)) .ToDtoList() }; foreach (var h in scheme.EligibleHouseholds) { h.FamilyMembers = h.FamilyMembers .Where(p => p.Age < 18 || (p.Spouse != null && (from a in h.FamilyMembers select a.Id).ToList().Contains(p.Spouse.Value) ) ) .ToList(); } result.Add(scheme); return(result); }
public async Task <IEnumerable <GrantDisbursementSchemesDto> > GetGrantDisbursements(ICollection <Household> households) { var config = await _context.GrantConfiguration.ToListAsync(); var result = new List <GrantDisbursementSchemesDto>(); config.ForEach(p => { var grant = new GrantDisbursementSchemesDto(); grant.Scheme = p.SchemeName; var eligbleHouseholds = households .WhereIf(p.AgeGreaterThan != null, x => x.MaxAge > p.AgeGreaterThan) .WhereIf(p.AgeLessThan != null, x => x.MinAge < p.AgeLessThan) .WhereIf(p.TotalAnnualIncomeGreaterThan != null, x => x.TotalAnnualIncome > p.TotalAnnualIncomeGreaterThan) .WhereIf(p.TotalAnnualIncomeLessThan != null, x => x.TotalAnnualIncome < p.TotalAnnualIncomeLessThan) .WhereIf(p.SpouseLivingTogether != null, x => x.IsSpouseLivingTogether) .WhereIf(p.HousingType != null, x => x.HousingType.Equals(p.HousingType)) .WhereIf(p.HouseholdSizeLessThan != null, x => x.FamilyMembers.Count < p.HouseholdSizeLessThan) .WhereIf(p.HouseholdSizeGreaterThan != null, x => x.FamilyMembers.Count > p.HouseholdSizeGreaterThan) .ToList() .ToDtoList(); // filter family members by age only if criteria does not include total household annual income or size of household if ( (p.TotalAnnualIncomeGreaterThan == null) && (p.TotalAnnualIncomeLessThan == null) && (p.HouseholdSizeGreaterThan == null) && (p.HouseholdSizeLessThan == null) ) { eligbleHouseholds.ForEach(e => { e.FamilyMembers = e.FamilyMembers .WhereIf(p.AgeGreaterThan != null, x => x.Age > p.AgeGreaterThan) .WhereIf(p.AgeLessThan != null, x => x.Age < p.AgeLessThan) .ToList(); }); } grant.EligibleHouseholds = eligbleHouseholds; result.Add(grant); }); return(result); }