Added a MeetingRegistration.attended field, to keep apart meeting attendence and meeting registration before attendance.
- Legacy-Id: 17954
This commit is contained in:
parent
59487f5627
commit
8a6026ce6e
31
ietf/stats/migrations/0003_meetingregistration_attended.py
Normal file
31
ietf/stats/migrations/0003_meetingregistration_attended.py
Normal 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),
|
||||||
|
]
|
|
@ -61,6 +61,7 @@ class MeetingRegistration(models.Model):
|
||||||
email = models.EmailField(blank=True, null=True)
|
email = models.EmailField(blank=True, null=True)
|
||||||
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)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "{} {}".format(self.first_name, self.last_name)
|
return "{} {}".format(self.first_name, self.last_name)
|
||||||
|
|
|
@ -123,9 +123,9 @@ class StatisticsTests(TestCase):
|
||||||
def test_meeting_stats(self):
|
def test_meeting_stats(self):
|
||||||
# create some data for the statistics
|
# create some data for the statistics
|
||||||
meeting = MeetingFactory(type_id='ietf', date=datetime.date.today(), number="96")
|
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"))
|
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"))
|
CountryAlias.objects.get_or_create(alias="FR", country=CountryName.objects.get(slug="FR"))
|
||||||
|
|
||||||
# check redirect
|
# check redirect
|
||||||
|
|
|
@ -253,13 +253,13 @@ def get_meeting_registration_data(meeting):
|
||||||
created = False
|
created = False
|
||||||
else:
|
else:
|
||||||
object = MeetingRegistration.objects.create(meeting_id=meeting.pk, email=address)
|
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
|
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
|
# Add a Person object to MeetingRegistration object
|
||||||
# if valid email is available
|
# if valid email is available
|
||||||
|
|
|
@ -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))
|
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):
|
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":
|
if stats_type == "country":
|
||||||
stats_title = "Number of attendees for {} {} per country".format(meeting.type.name, meeting.number)
|
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):
|
elif not meeting and any(stats_type == t[0] for t in possible_stats_types):
|
||||||
template_name = "overview"
|
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":
|
if stats_type == "overview":
|
||||||
stats_title = "Number of attendees per meeting"
|
stats_title = "Number of attendees per meeting"
|
||||||
|
|
Loading…
Reference in a new issue