diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-05-06 18:16:05 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2019-06-17 13:21:28 +0200 |
commit | 0e14ea23407a6b99fba0fce091b31567979311f9 (patch) | |
tree | c9fb03cb05f7febf5278982a9d19ab19a959f316 /ishtar_common/admin.py | |
parent | c2efcd641e59ef43a496eb66871de0595a51ff33 (diff) | |
download | Ishtar-0e14ea23407a6b99fba0fce091b31567979311f9.tar.bz2 Ishtar-0e14ea23407a6b99fba0fce091b31567979311f9.zip |
Generate libreoffice template for importer from admin
Diffstat (limited to 'ishtar_common/admin.py')
-rw-r--r-- | ishtar_common/admin.py | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/ishtar_common/admin.py b/ishtar_common/admin.py index 23167180a..75d223005 100644 --- a/ishtar_common/admin.py +++ b/ishtar_common/admin.py @@ -938,9 +938,47 @@ def duplicate_importertype(modeladmin, request, queryset): duplicate_importertype.short_description = _(u"Duplicate") +def generate_libreoffice_template(modeladmin, request, queryset): + if queryset.count() != 1: + messages.add_message( + request, messages.ERROR, + str(_("Select only one importer.")) + ) + url = reverse( + 'admin:%s_%s_changelist' % ( + modeladmin.model._meta.app_label, + modeladmin.model._meta.model_name) + ) + '?' + urllib.parse.urlencode(request.GET) + return HttpResponseRedirect(url) + + importer_type = queryset.all()[0] + dest_filename = importer_type.get_libreoffice_template() + in_memory = BytesIO() + with open(dest_filename, 'rb') as fle: + in_memory.write(fle.read()) + filename = dest_filename.split(os.sep)[-1] + + response = HttpResponse( + content_type='application/vnd.oasis.opendocument.spreadsheet') + response['Content-Disposition'] = 'attachment; filename=%s' % \ + filename.replace(' ', '_') + in_memory.seek(0) + response.write(in_memory.read()) + return response + + +generate_libreoffice_template.short_description = \ + _("Export as libreoffice template") + + +importer_type_actions = [duplicate_importertype] +if settings.USE_LIBREOFFICE: + importer_type_actions.append(generate_libreoffice_template) + + class ImporterTypeAdmin(admin.ModelAdmin): list_display = ('name', 'associated_models', 'available') - actions = [duplicate_importertype] + actions = importer_type_actions admin_site.register(models.ImporterType, ImporterTypeAdmin) |