11from django .contrib .contenttypes .admin import GenericTabularInline
22from django .contrib .contenttypes .models import ContentType
3+ from django .contrib .sites .models import Site
34from ordered_model .admin import OrderedModelAdmin
45from polymorphic .admin import PolymorphicInlineSupportMixin , StackedPolymorphicInline , PolymorphicParentModelAdmin , \
56 PolymorphicChildModelAdmin
1314from django .utils .functional import cached_property
1415from django .utils .html import mark_safe
1516
17+ from import_export import resources
18+ from import_export .fields import Field
19+ from import_export .admin import ImportExportActionModelAdmin
20+
1621from mailing .admin import BaseEmailTemplateAdmin
1722from sponsors .models import *
1823from sponsors .models .benefits import RequiredAssetMixin
@@ -292,8 +297,78 @@ def choices(self, changelist):
292297 return choices
293298
294299
300+ class SponsorshipResource (resources .ModelResource ):
301+
302+ sponsor_name = Field (attribute = 'sponsor__name' , column_name = 'Company Name' )
303+ contact_name = Field (column_name = 'Contact Name(s)' )
304+ contact_email = Field (column_name = 'Contact Email(s)' )
305+ contact_phone = Field (column_name = 'Contact phone number' )
306+ contact_type = Field (column_name = 'Contact Type(s)' )
307+ start_date = Field (attribute = 'start_date' , column_name = 'Start Date' )
308+ end_date = Field (attribute = 'end_date' , column_name = 'End Date' )
309+ web_logo = Field (column_name = 'Logo' )
310+ landing_page_url = Field (attribute = 'sponsor__landing_page_url' , column_name = 'Webpage link' )
311+ level = Field (attribute = 'package__name' , column_name = 'Sponsorship Level' )
312+ cost = Field (attribute = 'sponsorship_fee' , column_name = 'Sponsorship Cost' )
313+ admin_url = Field (attribute = 'admin_url' , column_name = 'Admin Link' )
314+
315+ class Meta :
316+ model = Sponsorship
317+ fields = (
318+ 'sponsor_name' ,
319+ 'contact_name' ,
320+ 'contact_email' ,
321+ 'contact_phone' ,
322+ 'contact_type' ,
323+ 'start_date' ,
324+ 'end_date' ,
325+ 'web_logo' ,
326+ 'landing_page_url' ,
327+ 'level' ,
328+ 'cost' ,
329+ 'admin_url' ,
330+ )
331+ export_order = (
332+ "sponsor_name" ,
333+ "contact_name" ,
334+ "contact_email" ,
335+ "contact_phone" ,
336+ "contact_type" ,
337+ "start_date" ,
338+ "end_date" ,
339+ "web_logo" ,
340+ "landing_page_url" ,
341+ "level" ,
342+ "cost" ,
343+ "admin_url" ,
344+ )
345+
346+ def get_sponsorship_url (self , sponsorship ):
347+ domain = Site .objects .get_current ().domain
348+ url = reverse ("admin:sponsors_sponsorship_change" , args = [sponsorship .id ])
349+ return f'https://{ domain } { url } '
350+
351+ def dehydrate_web_logo (self , sponsorship ):
352+ return sponsorship .sponsor .web_logo .url
353+
354+ def dehydrate_contact_type (self , sponsorship ):
355+ return "\n " .join ([contact .type for contact in sponsorship .sponsor .contacts .all ()])
356+
357+ def dehydrate_contact_name (self , sponsorship ):
358+ return "\n " .join ([contact .name for contact in sponsorship .sponsor .contacts .all ()])
359+
360+ def dehydrate_contact_email (self , sponsorship ):
361+ return "\n " .join ([contact .email for contact in sponsorship .sponsor .contacts .all ()])
362+
363+ def dehydrate_contact_phone (self , sponsorship ):
364+ return "\n " .join ([contact .phone for contact in sponsorship .sponsor .contacts .all ()])
365+
366+ def dehydrate_admin_url (self , sponsorship ):
367+ return self .get_sponsorship_url (sponsorship )
368+
369+
295370@admin .register (Sponsorship )
296- class SponsorshipAdmin (admin .ModelAdmin ):
371+ class SponsorshipAdmin (ImportExportActionModelAdmin , admin .ModelAdmin ):
297372 change_form_template = "sponsors/admin/sponsorship_change_form.html"
298373 form = SponsorshipReviewAdminForm
299374 inlines = [SponsorBenefitInline , AssetsInline ]
@@ -310,6 +385,7 @@ class SponsorshipAdmin(admin.ModelAdmin):
310385 ]
311386 list_filter = [SponsorshipStatusListFilter , "package" , "year" , TargetableEmailBenefitsFilter ]
312387 actions = ["send_notifications" ]
388+ resource_class = SponsorshipResource
313389 fieldsets = [
314390 (
315391 "Sponsorship Data" ,
0 commit comments