summaryrefslogtreecommitdiff
path: root/archaeological_files/admin.py
diff options
context:
space:
mode:
Diffstat (limited to 'archaeological_files/admin.py')
-rw-r--r--archaeological_files/admin.py41
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