generate pdf from agenda and protocol

This commit is contained in:
2021-05-05 07:12:55 +00:00
parent b036c0e8b2
commit b4437cbbd3
5 changed files with 88 additions and 10 deletions

View File

@@ -1,17 +1,20 @@
from collections import deque
import logging
from taggit.models import Tag
from django.shortcuts import render
from collections import deque
from django.conf import settings
from django.http import HttpResponse, JsonResponse, HttpResponseServerError
from django.utils.text import slugify
from django.shortcuts import render
from django.template.loader import render_to_string
from django.utils import timezone
from django.utils.text import slugify
from taggit.models import Tag
from documents.api import get_pad_link
from documents.etherpadlib import add_ep_cookie
from members.models import Member, JobMember
from .models import Post, FetMeeting, FileUpload
from .utils import render_to_pdf
logger = logging.getLogger(__name__)
@@ -67,11 +70,17 @@ def tags(request, tag=""):
return render(request, "posts/tag.html", context)
def show(request, id=None):
def __get_post_object(id=None):
if id.isdigit() or id is int:
p = Post.objects.get(id=int(id))
return Post.objects.get(id=int(id))
elif id != "" and id is not None:
p = Post.objects.get(slug=(id))
return Post.objects.get(slug=id)
return None
def show(request, id=None):
p = __get_post_object(id)
files = deque(FileUpload.objects.filter(post=p))
@@ -85,10 +94,14 @@ def show(request, id=None):
ep_agenda_link = "#"
ep_protocol_link = "#"
# set filename for pdf, not a nice solution
filename_agenda = None
filename_protocol = None
if p.has_agenda: # and p.agenda_key:
try:
ep_agenda_link = get_pad_link(p.agenda_key)
filename_agenda = p.slug + "-agenda.pdf"
except Exception as e:
logger.error(
"Can't get the agenda link from '%s'. Error: %s", p.agenda_key, e
@@ -98,6 +111,7 @@ def show(request, id=None):
if p.has_protocol: # and p.protocol_key:
try:
ep_protocol_link = get_pad_link(p.protocol_key)
filename_protocol = p.slug + "-protokoll.pdf"
except Exception as e:
logger.error(
"Can't get the protocol link from '%s. Error: %s", p.protocol_key, e
@@ -120,6 +134,8 @@ def show(request, id=None):
"related_posts": related_posts[0:6],
"ep_agenda_link": ep_agenda_link,
"ep_protocol_link": ep_protocol_link,
"filename_agenda": filename_agenda,
"filename_protocol": filename_protocol,
}
response = render(request, "posts/show.html", context)
@@ -134,6 +150,30 @@ def show(request, id=None):
return response
def show_pdf(self, id, filename=None):
p = __get_post_object(id)
# it works but not a nice solution
html = ""
if "agenda" in filename:
html = p.agenda_html
elif "protokoll" in filename:
html = p.protocol_html
rendered = render_to_string(settings.BASE_DIR + "/templates/posts/pdf/template.html")
# get body-content from pdf template
rendered = rendered.split("<html>")[1]
rendered = rendered.split("<body>")[0]
# set body-content in html
idx = html.index("<body>")
html = html[:idx] + rendered + html[idx:]
pdf = render_to_pdf(html)
return HttpResponse(pdf, content_type='application/pdf')
###########
# HELPERS #
###########