mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Add 'REPORT_DEBUG_MODE' setting
- If set, reports are printed in raw HTML - Not pretty, but useful for debugging output of rendered template
This commit is contained in:
parent
dbaa0fc300
commit
30d95e1511
@ -174,6 +174,13 @@ class InvenTreeSetting(models.Model):
|
||||
'validator': bool,
|
||||
},
|
||||
|
||||
'REPORT_DEBUG_MODE': {
|
||||
'name': _('Debug Mode'),
|
||||
'description': _('Generate reports in debug mode (HTML output)'),
|
||||
'default': False,
|
||||
'validator': bool,
|
||||
},
|
||||
|
||||
'REPORT_DEFAULT_PAGE_SIZE': {
|
||||
'name': _('Page Size'),
|
||||
'description': _('Default page size for PDF reports'),
|
||||
|
@ -3,12 +3,14 @@ from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext as _
|
||||
from django.conf.urls import url, include
|
||||
from django.http import HttpResponse
|
||||
|
||||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
|
||||
from rest_framework import generics, filters
|
||||
from rest_framework.response import Response
|
||||
|
||||
import common.models
|
||||
import InvenTree.helpers
|
||||
|
||||
from stock.models import StockItem
|
||||
@ -165,31 +167,54 @@ class StockItemTestReportPrint(generics.RetrieveAPIView, StockItemReportMixin):
|
||||
|
||||
outputs = []
|
||||
|
||||
# In debug mode, generate single HTML output, rather than PDF
|
||||
debug_mode = common.models.InvenTreeSetting.get_setting('REPORT_DEBUG_MODE')
|
||||
|
||||
# Merge one or more PDF files into a single download
|
||||
for item in items:
|
||||
report = self.get_object()
|
||||
report.stock_item = item
|
||||
|
||||
outputs.append(report.render(request))
|
||||
if debug_mode:
|
||||
outputs.append(report.render_to_string(request))
|
||||
else:
|
||||
outputs.append(report.render(request))
|
||||
|
||||
pages = []
|
||||
|
||||
if len(outputs) > 1:
|
||||
# If more than one output is generated, merge them into a single file
|
||||
for output in outputs:
|
||||
doc = output.get_document()
|
||||
for page in doc.pages:
|
||||
pages.append(page)
|
||||
if debug_mode:
|
||||
"""
|
||||
Contatenate all rendered templates into a single HTML string,
|
||||
and return the string as a HTML response.
|
||||
"""
|
||||
|
||||
html = "\n".join(outputs)
|
||||
|
||||
return HttpResponse(html)
|
||||
|
||||
pdf = outputs[0].get_document().copy(pages).write_pdf()
|
||||
else:
|
||||
pdf = outputs[0].get_document().write_pdf()
|
||||
"""
|
||||
Concatenate all rendered pages into a single PDF object,
|
||||
and return the resulting document!
|
||||
"""
|
||||
|
||||
return InvenTree.helpers.DownloadFile(
|
||||
pdf,
|
||||
'test_report.pdf',
|
||||
content_type='application/pdf'
|
||||
)
|
||||
pages = []
|
||||
|
||||
if len(outputs) > 1:
|
||||
# If more than one output is generated, merge them into a single file
|
||||
for output in outputs:
|
||||
doc = output.get_document()
|
||||
for page in doc.pages:
|
||||
pages.append(page)
|
||||
|
||||
pdf = outputs[0].get_document().copy(pages).write_pdf()
|
||||
else:
|
||||
pdf = outputs[0].get_document().write_pdf()
|
||||
|
||||
return InvenTree.helpers.DownloadFile(
|
||||
pdf,
|
||||
'test_report.pdf',
|
||||
content_type='application/pdf'
|
||||
)
|
||||
|
||||
|
||||
report_api_urls = [
|
||||
|
@ -14,6 +14,8 @@ import datetime
|
||||
from django.db import models
|
||||
from django.conf import settings
|
||||
|
||||
from django.template.loader import render_to_string
|
||||
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
from django.core.validators import FileExtensionValidator
|
||||
|
||||
@ -175,16 +177,11 @@ class ReportTemplateBase(ReportBase):
|
||||
|
||||
return {}
|
||||
|
||||
def render(self, request, **kwargs):
|
||||
def context(self, request):
|
||||
"""
|
||||
Render the template to a PDF file.
|
||||
|
||||
Uses django-weasyprint plugin to render HTML template against Weasyprint
|
||||
All context to be passed to the renderer.
|
||||
"""
|
||||
|
||||
# TODO: Support custom filename generation!
|
||||
# filename = kwargs.get('filename', 'report.pdf')
|
||||
|
||||
context = self.get_context_data(request)
|
||||
|
||||
context['date'] = datetime.datetime.now().date()
|
||||
@ -196,6 +193,27 @@ class ReportTemplateBase(ReportBase):
|
||||
context['request'] = request
|
||||
context['user'] = request.user
|
||||
|
||||
return context
|
||||
|
||||
def render_to_string(self, request, **kwargs):
|
||||
"""
|
||||
Render the report to a HTML stiring.
|
||||
|
||||
Useful for debug mode (viewing generated code)
|
||||
"""
|
||||
|
||||
return render_to_string(self.template_name, self.context(request), request)
|
||||
|
||||
def render(self, request, **kwargs):
|
||||
"""
|
||||
Render the template to a PDF file.
|
||||
|
||||
Uses django-weasyprint plugin to render HTML template against Weasyprint
|
||||
"""
|
||||
|
||||
# TODO: Support custom filename generation!
|
||||
# filename = kwargs.get('filename', 'report.pdf')
|
||||
|
||||
# Render HTML template to PDF
|
||||
wp = WeasyprintReportMixin(
|
||||
request,
|
||||
@ -205,7 +223,7 @@ class ReportTemplateBase(ReportBase):
|
||||
**kwargs)
|
||||
|
||||
return wp.render_to_response(
|
||||
context,
|
||||
self.context(request),
|
||||
**kwargs)
|
||||
|
||||
enabled = models.BooleanField(
|
||||
|
@ -50,6 +50,10 @@ content: "{% trans 'Stock Item Test Report' %}";
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
.part-img {
|
||||
height: 4cm;
|
||||
}
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block page_content %}
|
||||
@ -64,7 +68,7 @@ content: "{% trans 'Stock Item Test Report' %}";
|
||||
<p><i>Stock Item ID: {{ stock_item.pk }}</i></p>
|
||||
</div>
|
||||
<div class='img-right'>
|
||||
<img src="{% part_image part %}">
|
||||
<img class='part-img' src="{% part_image part %}">
|
||||
<hr>
|
||||
<h4>
|
||||
{% if stock_item.is_serialized %}
|
||||
|
@ -16,6 +16,7 @@
|
||||
{% include "InvenTree/settings/header.html" %}
|
||||
<tbody>
|
||||
{% include "InvenTree/settings/setting.html" with key="REPORT_DEFAULT_PAGE_SIZE" %}
|
||||
{% include "InvenTree/settings/setting.html" with key="REPORT_DEBUG_MODE" %}
|
||||
{% include "InvenTree/settings/setting.html" with key="REPORT_ENABLE_TEST_REPORT" %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
Loading…
Reference in New Issue
Block a user