Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion attendee/admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
from django.contrib import admin
from import_export import resources
from import_export.admin import ImportExportModelAdmin

from .models import AttendeeProfile, PretixOrder

Expand All @@ -21,8 +23,23 @@ class PretixOrderAdmin(admin.ModelAdmin):
search_fields = ("order_code", "email", "name")


class AttendeeProfileResource(resources.ModelResource):
class Meta:
model = AttendeeProfile
fields = (
"order",
"order__name",
"order__email",
"order__status",
"may_share_email_with_sponsor",
"chapter_description",
"chapter_email",
"chapter_website",
)


@admin.register(AttendeeProfile)
class AttendeeProfileAdmin(admin.ModelAdmin):
class AttendeeProfileAdmin(ImportExportModelAdmin):
list_display = (
"order",
"city",
Expand All @@ -48,3 +65,4 @@ class AttendeeProfileAdmin(admin.ModelAdmin):
"participated_in_previous_event",
)
readonly_fields = ("raw_answers",)
resource_classes = [AttendeeProfileResource]
1 change: 0 additions & 1 deletion portal/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -690,7 +690,6 @@ def get_first_time_attendee_count():

def get_first_time_attendee_percent():
"""Returns the percent of first-time attendees."""
cache.clear()
first_time_attendee_percent = cache.get(CACHE_KEY_ATTENDEE_FIRST_TIME_PERCENT)
if not first_time_attendee_percent:
attendee_total_count = get_attendee_count_cache()
Expand Down
1 change: 0 additions & 1 deletion tests/portal/test_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,6 @@ def test_attendee_breakdown_with_no_profiles(self):
"""Test attendee breakdown returns empty when no profiles exist."""
from portal.common import get_attendee_breakdown

cache.clear()
breakdown = get_attendee_breakdown()
for b in breakdown:
assert b["data"] == []
71 changes: 69 additions & 2 deletions tests/volunteer/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,11 @@
from django.core import mail
from django.core.files.uploadedfile import SimpleUploadedFile
from django.urls import reverse
from tablib import Dataset

from volunteer.admin import PyladiesChapterAdmin
from volunteer.models import ApplicationStatus, PyladiesChapter, VolunteerProfile
from volunteer.admin import PyladiesChapterAdmin, VolunteerProfileResource
from volunteer.constants import ApplicationStatus
from volunteer.models import PyladiesChapter, VolunteerProfile


@pytest.mark.django_db
Expand Down Expand Up @@ -73,3 +75,68 @@ def test_pyladies_chapter_admin_view(self):
has_logo_field = pyladies_chapter_admin.has_logo(chapter)

assert has_logo_field is True


class TestVolunteerImportExport:
def test_export_volunteer_does_not_trigger_email(self, portal_user):
dataset = Dataset()
dataset.headers = [
"id",
"user__first_name",
"user__last_name",
"user__email",
"application_status",
"github_username",
"discord_username",
"instagram_username",
"bluesky_username",
"mastodon_url",
"x_username",
"linkedin_url",
"region",
"chapter__chapter_name",
]
dataset.append(
[
portal_user.id,
portal_user.first_name,
portal_user.last_name,
portal_user.email,
ApplicationStatus.APPROVED.value,
"",
"",
"",
"",
"",
"",
"",
"North America",
"",
]
)

dataset.append(
[
portal_user.id,
portal_user.first_name,
portal_user.last_name,
portal_user.email,
ApplicationStatus.CANCELLED.value,
"",
"",
"",
"",
"",
"",
"",
"USA",
"",
]
)

resource = VolunteerProfileResource()
mail.outbox.clear()
resource.import_data(dataset, dry_run=False)
assert len(mail.outbox) == 0 # no email
resource.import_data(dataset, dry_run=True)
assert len(mail.outbox) == 0 # no email
28 changes: 27 additions & 1 deletion volunteer/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,32 @@ def bulk_waitlist_volunteers(modeladmin, request, queryset):
volunteer.save()


class VolunteerProfileAdmin(admin.ModelAdmin):
class VolunteerProfileResource(resources.ModelResource):
def before_save_instance(self, instance, row, **kwargs):
# during 'confirm' step, dry_run is True
instance.from_import_export = True

class Meta:
model = VolunteerProfile
fields = (
"id",
"user__first_name",
"user__last_name",
"user__email",
"application_status",
"github_username",
"discord_username",
"instagram_username",
"bluesky_username",
"mastodon_url",
"x_username",
"linkedin_url",
"region",
"chapter__chapter_name",
)


class VolunteerProfileAdmin(ImportExportModelAdmin):
list_display = (
"user",
"user__first_name",
Expand All @@ -38,6 +63,7 @@ class VolunteerProfileAdmin(admin.ModelAdmin):
)
list_filter = ("region", "application_status")
actions = [bulk_waitlist_volunteers]
resource_classes = [VolunteerProfileResource]


class PyladiesChapterResource(resources.ModelResource):
Expand Down