feat: Add tracking checked-in to MeetingRegistration and the registration API. (#4280)

* feat: add field MeetingRegistration.checkedin to track onsite checkin

* feat: add handling of ticket_type, checkedin to get_meeting_registation_data. Fixes #3672
This commit is contained in:
Ryan Cross 2022-07-26 14:17:19 -04:00 committed by GitHub
parent 109c646450
commit 2d48c84360
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 2 deletions

View file

@ -0,0 +1,18 @@
# Generated by Django 2.2.28 on 2022-07-26 08:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('stats', '0004_split_records'),
]
operations = [
migrations.AddField(
model_name='meetingregistration',
name='checkedin',
field=models.BooleanField(default=False),
),
]

View file

@ -62,6 +62,7 @@ class MeetingRegistration(models.Model):
reg_type = models.CharField(blank=True, max_length=255) reg_type = models.CharField(blank=True, max_length=255)
ticket_type = models.CharField(blank=True, max_length=255) ticket_type = models.CharField(blank=True, max_length=255)
attended = models.BooleanField(default=False) attended = models.BooleanField(default=False)
checkedin = models.BooleanField(default=False)
def __str__(self): def __str__(self):
return "{} {}".format(self.first_name, self.last_name) return "{} {}".format(self.first_name, self.last_name)

View file

@ -237,7 +237,9 @@ class StatisticsTests(TestCase):
'Company': 'ABC', 'Company': 'ABC',
'Country': 'US', 'Country': 'US',
'Email': person.email().address, 'Email': person.email().address,
'RegType': 'onsite' 'RegType': 'onsite',
'TicketType': 'week_pass',
'CheckedIn': 'True',
} }
data2 = data.copy() data2 = data.copy()
data2['RegType'] = 'hackathon' data2['RegType'] = 'hackathon'
@ -259,6 +261,9 @@ class StatisticsTests(TestCase):
self.assertEqual(query.count(), 2) self.assertEqual(query.count(), 2)
self.assertEqual(query.filter(reg_type='onsite').count(), 1) self.assertEqual(query.filter(reg_type='onsite').count(), 1)
self.assertEqual(query.filter(reg_type='hackathon').count(), 1) self.assertEqual(query.filter(reg_type='hackathon').count(), 1)
onsite = query.get(reg_type='onsite')
self.assertEqual(onsite.ticket_type, 'week_pass')
self.assertEqual(onsite.checkedin, True)
# call a second time to test delete # call a second time to test delete
get_meeting_registration_data(meeting) get_meeting_registration_data(meeting)
query = MeetingRegistration.objects.filter(meeting=meeting, email=person.email()) query = MeetingRegistration.objects.filter(meeting=meeting, email=person.email())

View file

@ -261,6 +261,9 @@ def get_meeting_registration_data(meeting):
country_code = registration['Country'].strip() country_code = registration['Country'].strip()
address = registration['Email'].strip() address = registration['Email'].strip()
reg_type = registration['RegType'].strip() reg_type = registration['RegType'].strip()
ticket_type = registration['TicketType'].strip()
checkedin = registration['CheckedIn'].strip()
if (address, reg_type) in meeting_registrations: if (address, reg_type) in meeting_registrations:
object = meeting_registrations.pop((address, reg_type)) object = meeting_registrations.pop((address, reg_type))
created = False created = False
@ -274,11 +277,15 @@ def get_meeting_registration_data(meeting):
if (object.first_name != first_name[:200] or if (object.first_name != first_name[:200] or
object.last_name != last_name[:200] or object.last_name != last_name[:200] or
object.affiliation != affiliation or object.affiliation != affiliation or
object.country_code != country_code): object.country_code != country_code or
object.ticket_type != ticket_type or
object.checkedin != checkedin):
object.first_name=first_name[:200] object.first_name=first_name[:200]
object.last_name=last_name[:200] object.last_name=last_name[:200]
object.affiliation=affiliation object.affiliation=affiliation
object.country_code=country_code object.country_code=country_code
object.ticket_type=ticket_type
object.checkedin=checkedin
object.save() object.save()
# Add a Person object to MeetingRegistration object # Add a Person object to MeetingRegistration object