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);
        }
Example #2
0
        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);
        }