diff --git a/ietf/stats/migrations/0003_meetingregistration_attended.py b/ietf/stats/migrations/0003_meetingregistration_attended.py new file mode 100644 index 000000000..848e0a421 --- /dev/null +++ b/ietf/stats/migrations/0003_meetingregistration_attended.py @@ -0,0 +1,31 @@ +# Generated by Django 2.0.13 on 2020-06-09 04:39 + +from django.db import migrations, models + + +def forward(apps, schema_editor): + MeetingRegistration = apps.get_model('stats', 'MeetingRegistration') + # Set attended=True on all existing records, + # + # Going forward, this will be unset on registration + # (ietf.api.views.api_new_meeting_registration()), and set on attendee + # import (ietf.stats.utils.get_meeting_registration_data() ) + MeetingRegistration.objects.update(attended=True) + +def reverse(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('stats', '0002_add_meetingregistration_fields'), + ] + + operations = [ + migrations.AddField( + model_name='meetingregistration', + name='attended', + field=models.BooleanField(default=False), + ), + migrations.RunPython(forward, reverse), + ] diff --git a/ietf/stats/models.py b/ietf/stats/models.py index 9453f1f8e..7054bc258 100644 --- a/ietf/stats/models.py +++ b/ietf/stats/models.py @@ -61,6 +61,7 @@ class MeetingRegistration(models.Model): email = models.EmailField(blank=True, null=True) reg_type = models.CharField(blank=True, max_length=255) ticket_type = models.CharField(blank=True, max_length=255) - + attended = models.BooleanField(default=False) + def __str__(self): return "{} {}".format(self.first_name, self.last_name) diff --git a/ietf/stats/tests.py b/ietf/stats/tests.py index e755a6c88..b44022284 100644 --- a/ietf/stats/tests.py +++ b/ietf/stats/tests.py @@ -123,9 +123,9 @@ class StatisticsTests(TestCase): def test_meeting_stats(self): # create some data for the statistics meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(), number="96") - MeetingRegistration.objects.create(first_name='John', last_name='Smith', country_code='US', email="john.smith@example.us", meeting=meeting) + MeetingRegistration.objects.create(first_name='John', last_name='Smith', country_code='US', email="john.smith@example.us", meeting=meeting, attended=True) CountryAlias.objects.get_or_create(alias="US", country=CountryName.objects.get(slug="US")) - MeetingRegistration.objects.create(first_name='Jaume', last_name='Guillaume', country_code='FR', email="jaume.guillaume@example.fr", meeting=meeting) + MeetingRegistration.objects.create(first_name='Jaume', last_name='Guillaume', country_code='FR', email="jaume.guillaume@example.fr", meeting=meeting, attended=True) CountryAlias.objects.get_or_create(alias="FR", country=CountryName.objects.get(slug="FR")) # check redirect diff --git a/ietf/stats/utils.py b/ietf/stats/utils.py index 47c1dd976..8fb263d8e 100644 --- a/ietf/stats/utils.py +++ b/ietf/stats/utils.py @@ -253,13 +253,13 @@ def get_meeting_registration_data(meeting): created = False else: object = MeetingRegistration.objects.create(meeting_id=meeting.pk, email=address) - object.first_name=first_name[:200] - object.last_name=last_name[:200] - object.affiliation=affiliation - object.country_code=country_code - object.attended = True - object.save() created = True + object.first_name=first_name[:200] + object.last_name=last_name[:200] + object.affiliation=affiliation + object.country_code=country_code + object.attended = True + object.save() # Add a Person object to MeetingRegistration object # if valid email is available diff --git a/ietf/stats/views.py b/ietf/stats/views.py index c7e38bf38..6e0e65bf5 100644 --- a/ietf/stats/views.py +++ b/ietf/stats/views.py @@ -811,7 +811,7 @@ def meeting_stats(request, num=None, stats_type=None): return email.utils.formataddr(((r.first_name + " " + r.last_name).strip(), r.email)) if meeting and any(stats_type == t[0] for t in possible_stats_types): - attendees = MeetingRegistration.objects.filter(meeting=meeting) + attendees = MeetingRegistration.objects.filter(meeting=meeting, attended=True) if stats_type == "country": stats_title = "Number of attendees for {} {} per country".format(meeting.type.name, meeting.number) @@ -883,7 +883,7 @@ def meeting_stats(request, num=None, stats_type=None): elif not meeting and any(stats_type == t[0] for t in possible_stats_types): template_name = "overview" - attendees = MeetingRegistration.objects.filter(meeting__type="ietf").select_related('meeting') + attendees = MeetingRegistration.objects.filter(meeting__type="ietf", attended=True).select_related('meeting') if stats_type == "overview": stats_title = "Number of attendees per meeting"