Predined Reward Types
Tue Jul 09 2024 10:10:17 GMT+0000 (Coordinated Universal Time)
Saved by @iamkatmakhafola
//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;
//}
}



Comments