from django.contrib import admin
-from .models import EmailTemplate, EmailSent
+from django.contrib import messages
+from django.utils.translation import gettext_lazy as _
+from fnpdjango.actions import export_as_csv_action
+from . import models
-class EmailSentInline(admin.TabularInline):
- model = EmailSent
- fields = ['timestamp', 'email', 'subject']
- readonly_fields = ['timestamp', 'email', 'subject']
- extra = 0
- can_delete = False
- show_change_link = True
+class EmailTemplateAdmin(admin.ModelAdmin):
+ list_display = ['state', 'min_days_since', 'subject', 'min_hour', 'is_active']
+ fieldsets = [
+ (None, {"fields": [
+ 'state',
+ ('min_days_since', 'max_days_since'),
+ 'is_active',
+ ]}),
+ (_('E-mail content'), {"fields": [
+ 'subject', 'body'
+ ]}),
+ (_('Sending constraints'), {"fields": [
+ ('min_day_of_month', 'max_day_of_month'),
+ ('dow_1', 'dow_2', 'dow_3', 'dow_4', 'dow_5', 'dow_6', 'dow_7'),
+ ('min_hour', 'max_hour'),
+ ]}),
+ ]
- def has_add_permission(self, request, obj):
- return False
+ def _test_email(self, request, obj):
+ if request.user.email:
+ obj.send_test_email(request.user.email)
+ messages.info(request, _('Test e-mail has been sent to %(email)s.') % {"email": request.user.email})
+ else:
+ messages.warning(request, _('You have no email set. Test e-mail not sent.'))
+ def response_add(self, request, obj):
+ self._test_email(request, obj)
+ return super().response_add(request, obj)
-class EmailTemplateAdmin(admin.ModelAdmin):
- list_display = ['state', 'days', 'subject', 'hour']
- inlines = [EmailSentInline]
+ def response_change(self, request, obj):
+ self._test_email(request, obj)
+ return super().response_change(request, obj)
-admin.site.register(EmailTemplate, EmailTemplateAdmin)
+admin.site.register(models.EmailTemplate, EmailTemplateAdmin)
class EmailSentAdmin(admin.ModelAdmin):
list_filter = ['template']
- list_display = ['timestamp', 'template', 'email', 'subject']
- fields = ['timestamp', 'template', 'email', 'subject', 'body', 'hash_value']
+ list_display = ['timestamp', 'template', 'contact', 'subject']
+ fields = ['timestamp', 'template', 'contact', 'subject', 'body']
readonly_fields = fields
change_links = ['template']
-admin.site.register(EmailSent, EmailSentAdmin)
+admin.site.register(models.EmailSent, EmailSentAdmin)
+
+
+class ContactEmailSentInline(admin.TabularInline):
+ model = models.EmailSent
+ fields = ['timestamp', 'template', 'subject']
+ readonly_fields = ['timestamp', 'template', 'subject']
+ extra = 0
+ can_delete = False
+ show_change_link = True
+
+ def has_add_permission(self, request, obj):
+ return False
+
+
+class ContactAdmin(admin.ModelAdmin):
+ inlines = [ContactEmailSentInline]
+ list_filter = ['level']
+ list_display = ['email', 'level', 'since', 'expires_at']
+ search_fields = ['email']
+ date_hierarchy = 'since'
+ actions = [
+# export_as_csv_action(fields=['id', 'email', 'get_level_display', 'since', 'expires_at']),
+ export_as_csv_action('Eksport dla PHPList', fields=['email', 'wl_optout_url'])
+ ]
+
+admin.site.register(models.Contact, ContactAdmin)