mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 21:25:42 +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:
		| @@ -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 %} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user