summaryrefslogtreecommitdiff
path: root/ishtar_common/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r--ishtar_common/admin.py48
1 files changed, 48 insertions, 0 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py
index 4449f7ba4..7da8265cd 100644
--- a/ishtar_common/admin.py
+++ b/ishtar_common/admin.py
@@ -75,6 +75,9 @@ from archaeological_finds import forms as find_forms, \
forms_treatments as treatment_forms
from archaeological_warehouse import forms as warehouse_forms
+from ishtar_common.tasks import launch_export
+
+
csrf_protect_m = method_decorator(csrf_protect)
@@ -1399,6 +1402,51 @@ class AdministrationTaskAdmin(admin.ModelAdmin):
admin_site.register(models.AdministrationTask, AdministrationTaskAdmin)
+def launch_export_action(modeladmin, request, queryset):
+ model = modeladmin.model
+ back_url = reverse(
+ 'admin:%s_%s_changelist' % (
+ model._meta.app_label,
+ model._meta.model_name)
+ ) + '?' + urllib.parse.urlencode(request.GET)
+ if queryset.count() != 1:
+ messages.add_message(
+ request, messages.ERROR, str(_("Select only one task."))
+ )
+ return HttpResponseRedirect(back_url)
+
+ export_task = queryset.all()[0]
+
+ if export_task.state != "C":
+ messages.add_message(
+ request, messages.ERROR, str(
+ _("Export already exported/scheduled."))
+ )
+ return HttpResponseRedirect(back_url)
+
+ export_task.state = "S"
+ export_task.save()
+
+ if not settings.USE_BACKGROUND_TASK:
+ return launch_export(export_task)
+ return launch_export.delay(export_task)
+
+
+launch_export_action.short_description = _("Launch export")
+
+
+class ExportTaskAdmin(admin.ModelAdmin):
+ readonly_fields = ("result", )
+ exclude = ('creation_date', 'launch_date', 'finished_date')
+ list_display = ["label", 'state', 'creation_date', 'launch_date',
+ 'finished_date']
+ list_filter = ['state']
+ actions = [launch_export_action]
+
+
+admin_site.register(models.ExportTask, ExportTaskAdmin)
+
+
class UserProfileAdmin(admin.ModelAdmin):
list_display = ['person', 'profile_type', 'area_labels']
list_filter = ['profile_type']