diff options
Diffstat (limited to 'archaeological_files/admin.py')
| -rw-r--r-- | archaeological_files/admin.py | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/archaeological_files/admin.py b/archaeological_files/admin.py index e74dbbbff..97573265d 100644 --- a/archaeological_files/admin.py +++ b/archaeological_files/admin.py @@ -17,10 +17,15 @@ # See the file COPYING for details. +from io import BytesIO +import os +import tempfile + from django import forms from django.conf import settings from django.conf.urls import url -from django.http import HttpResponseRedirect +from django.contrib import messages +from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.urls import reverse from django.utils.translation import ugettext_lazy as _ @@ -256,13 +261,45 @@ class CopyPriceAgreementAdmin(GeneralTypeAdmin): ) +def export_prices(modeladmin, request, queryset): + if len(queryset) != 1: + error = str(_("Select only one price agreement.")) + modeladmin.message_user(request, error, level=messages.WARNING) + return + price_agreement = queryset[0] + with tempfile.TemporaryDirectory(prefix="ishtar-prices") as tmpdir: + pa_doc = price_agreement.generate_summary_document(tmpdir) + if not pa_doc: + modeladmin.message_user( + request, + str(_("Document not generated: is the LibreOffice daemon configured and running?")), + level=messages.ERROR + ) + return + + in_memory = BytesIO() + with open(pa_doc, "rb") as fle: + in_memory.write(fle.read()) + filename = pa_doc.split(os.sep)[-1].replace(" ", "_") + response = HttpResponse( + content_type="application/vnd.oasis.opendocument.spreadsheet" + ) + response["Content-Disposition"] = f"attachment; filename={filename}" + in_memory.seek(0) + response.write(in_memory.read()) + return response + + +export_prices.short_description = _("Export prices") + + class PriceAgreementAdmin(CopyPriceAgreementAdmin): list_filter = ("available",) extra_list_display = [ "start_date", "end_date", ] - actions = [] + actions = [export_prices] model = models.PriceAgreement |
