//Predined Reward Types Methods private async Task<List<Member>> GetQualifyingMembers(string criteria) { var qualifyingMembers = new List<Member>(); if (criteria == "Completed 10 Bookings in a Month") { qualifyingMembers = await GetMembersWithBookingsInMonth(10); } else if (criteria == "Member for Over a Year") { qualifyingMembers = await GetLoyalMembers(); } else if (criteria == "Made 20 Bookings in Last 3 Months") { qualifyingMembers = await GetFrequentBookers(20, 3); } //else if (criteria == "Perfect Attendance for a Month") //{ // qualifyingMembers = await GetPerfectAttendanceMembers(); //} //else if (criteria == "Consistent Attendance for a Quarter") //{ // qualifyingMembers = await GetConsistentAttendanceMembers(); //} return qualifyingMembers; } private async Task<List<Member>> GetMembersWithBookingsInMonth(int bookingCount) { var oneMonthAgo = DateTime.Now.AddMonths(-1); var qualifyingMembers = await _appDbContext.Members .Where(m => _appDbContext.Bookings .Where(b => b.Member_ID == m.Member_ID) .Join(_appDbContext.Booking_Time_Slots, b => b.Booking_ID, bts => bts.Booking_ID, (b, bts) => bts.Time_Slot_ID) .Join(_appDbContext.Time_Slots, btsId => btsId, ts => ts.Time_Slot_ID, (btsId, ts) => ts) .Count(ts => ts.Slot_Date >= oneMonthAgo) >= bookingCount) .ToListAsync(); return qualifyingMembers; } private async Task<List<Member>> GetLoyalMembers() { var oneYearAgo = DateTime.Now.AddYears(-1); var qualifyingMembers = await _appDbContext.Members .Join(_appDbContext.Contracts, m => m.Contract_ID, c => c.Contract_ID, (m, c) => new { Member = m, Contract = c }) .Where(mc => mc.Contract.Subscription_Date <= oneYearAgo) .Select(mc => mc.Member) .ToListAsync(); return qualifyingMembers; } private async Task<List<Member>> GetFrequentBookers(int bookingCount, int months) { var dateLimit = DateTime.Now.AddMonths(-months); var qualifyingMembers = await _appDbContext.Members .Where(m => _appDbContext.Bookings .Where(b => b.Member_ID == m.Member_ID) .Join(_appDbContext.Booking_Time_Slots, b => b.Booking_ID, bts => bts.Booking_ID, (b, bts) => bts.Time_Slot_ID) .Join(_appDbContext.Time_Slots, btsId => btsId, ts => ts.Time_Slot_ID, (btsId, ts) => ts) .Count(ts => ts.Slot_Date >= dateLimit) >= bookingCount) .ToListAsync(); return qualifyingMembers; } //private async Task<List<Member>> GetPerfectAttendanceMembers() //{ // var startDate = DateTime.Now.AddMonths(-1); // var qualifyingMembers = await _appDbContext.Members // .Where(m => _appDbContext.Attendance_Lists // .Count(a => a.Member_ID == m.Member_ID && a.Slot_Date >= startDate && a.Members_Present > 0) == 30) // .ToListAsync(); // return qualifyingMembers; //} //private async Task<List<Member>> GetConsistentAttendanceMembers() //{ // var startDate = DateTime.Now.AddMonths(-3); // var qualifyingMembers = await _appDbContext.Members // .Where(m => _appDbContext.Attendance_Lists // .Count(a => a.Member_ID == m.Member_ID && a.Slot_Date >= startDate && a.Members_Present > 0) >= 12) // .ToListAsync(); // return qualifyingMembers; //} }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter