public async Task ProcessAttendees(Event eventToSync) { if (eventToSync.Platform != EventPlatform.Meetup) { return; } var meetupAttendees = await _meetupServices.GetAttendees(int.Parse(eventToSync.EventId)); var meetupAttendeesIds = meetupAttendees.Select(s => s.Member.Id); var attendeesToEach = await _context.Attendances.Include(x => x.Member).Where(x => x.EventId == eventToSync.Id && meetupAttendeesIds.Contains(x.Member.MeetupId)).ToListAsync(); foreach (var attende in meetupAttendees) { var attendace = attendeesToEach?.FirstOrDefault(x => x.Member.MeetupId == attende.Member.Id); if (attendace == null) { if (attende.Member.Id != 0) { var newMember = await _context.Members.Where(x => x.MeetupId == attende.Member.Id).FirstOrDefaultAsync(); if (newMember == null) { newMember = new Member { MeetupId = attende.Member.Id, FirstName = attende.Member.Name, Picture = attende.Member.Photo?.HighresLink?.AbsolutePath == null ? "" : attende.Member.Photo?.HighresLink?.AbsoluteUri, Role = UserRole.Member, Biography = attende.Member.Bio } } ; attendace = SetState(attende, new Attendance(newMember, eventToSync, AttendanceRegisterType.ExternalPage)); await _context.Attendances.AddAsync(attendace); } } else { attendace = SetState(attende, attendace); } } await _context.SaveChangesAsync(); var percent = _context.Members.Count(x => meetupAttendeesIds.Contains(x.MeetupId) && (x.Events.Any(a => !a.DoNotKnow) && x.Events.Count(s => s.Attended) * 100 / x.Events.Count(a => !a.DoNotKnow) > 60)); if (meetupAttendeesIds.Any()) { eventToSync.EstimatedAttendancePercentage = ((decimal)percent * 100) / meetupAttendeesIds.Count(); } await _context.SaveChangesAsync(); }
public async Task ProcessAttendees(Event eventToSync) { if (eventToSync.Platform != EventPlatform.EventBrite) { return; } var meetupAttendees = await _eventBriteServices.GetAttendees(eventToSync.EventId); foreach (var attendees in meetupAttendees) { var attendace = eventToSync.Attendees.FirstOrDefault(x => x.Member.Email == attendees.Profile.Email); if (attendace == null) { var member = await _context.Members.FirstOrDefaultAsync(x => x.Email.ToUpper() == attendees.Profile.Email.ToUpper()); if (member == null) { member = new Member { FirstName = attendees.Profile.FirstName, LastName = attendees.Profile.LastName, Email = attendees.Profile.Email, } } ; if ((attendees.CheckIn)) { attendace = new Attendance(member, eventToSync, true, AttendanceRegisterType.ExternalPage); } else { attendace = new Attendance(member, eventToSync, false, AttendanceRegisterType.ExternalPage); } await _context.Attendances.AddAsync(attendace); } else { if ((attendees.CheckIn)) { attendace.Attend(); } } } await _context.SaveChangesAsync(); } }