Added a MeetingRegistration.attended field, to keep apart meeting attendence and meeting registration before attendance.

- Legacy-Id: 17954
This commit is contained in:
Henrik Levkowetz 2020-06-09 20:58:35 +00:00
parent 59487f5627
commit 8a6026ce6e
5 changed files with 43 additions and 11 deletions

View file

@ -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),
]

View file

@ -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)

View file

@ -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

View file

@ -253,13 +253,13 @@ def get_meeting_registration_data(meeting):
created = False
else:
object = MeetingRegistration.objects.create(meeting_id=meeting.pk, email=address)
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()
created = True
# Add a Person object to MeetingRegistration object
# if valid email is available

View file

@ -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"