generate pdf from agenda and protocol
This commit is contained in:
@@ -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 #
|
||||
###########
|
||||
|
||||
Reference in New Issue
Block a user