From fa95759a009539a2d3ebe5a18321e2290994c64b Mon Sep 17 00:00:00 2001 From: Oliver Walters <oliver.henry.walters@gmail.com> Date: Thu, 11 Mar 2021 14:09:57 +1100 Subject: [PATCH] Enable printing for PO and SO --- .../order/templates/order/order_base.html | 9 +- .../templates/order/sales_order_base.html | 7 ++ InvenTree/report/api.py | 8 +- InvenTree/templates/js/report.js | 108 ++++++++++++++++++ 4 files changed, 127 insertions(+), 5 deletions(-) diff --git a/InvenTree/order/templates/order/order_base.html b/InvenTree/order/templates/order/order_base.html index ed90e1f049..649dbda811 100644 --- a/InvenTree/order/templates/order/order_base.html +++ b/InvenTree/order/templates/order/order_base.html @@ -35,7 +35,10 @@ src="{% static 'img/blank_image.png' %}" <hr> <p>{{ order.description }}</p> <div class='btn-row'> - <div class='btn-group action-buttons'> + <div class='btn-group action-buttons' role='group'> + <button type='button' class='btn btn-default' id='print-order-report' title='{% trans "Print" %}'> + <span class='fas fa-print'></span> + </button> {% if roles.purchase_order.change %} <button type='button' class='btn btn-default' id='edit-order' title='{% trans "Edit order information" %}'> <span class='fas fa-edit icon-green'></span> @@ -149,6 +152,10 @@ $("#place-order").click(function() { }); {% endif %} +$('#print-order-report').click(function() { + printPurchaseOrderReports([{{ order.pk }}]); +}); + $("#edit-order").click(function() { launchModalForm("{% url 'po-edit' order.id %}", { diff --git a/InvenTree/order/templates/order/sales_order_base.html b/InvenTree/order/templates/order/sales_order_base.html index d671154529..3706026bc0 100644 --- a/InvenTree/order/templates/order/sales_order_base.html +++ b/InvenTree/order/templates/order/sales_order_base.html @@ -45,6 +45,9 @@ src="{% static 'img/blank_image.png' %}" <p>{{ order.description }}</p> <div class='btn-row'> <div class='btn-group action-buttons'> + <button type='button' class='btn btn-default' id='print-order-report' title='{% trans "Print" %}'> + <span class='fas fa-print'></span> + </button> {% if roles.sales_order.change %} <button type='button' class='btn btn-default' id='edit-order' title='Edit order information'> <span class='fas fa-edit icon-green'></span> @@ -158,4 +161,8 @@ $("#ship-order").click(function() { }); }); +$('#print-order-report').click(function() { + printSalesOrderReports([{{ order.pk }}]); +}); + {% endblock %} \ No newline at end of file diff --git a/InvenTree/report/api.py b/InvenTree/report/api.py index 7f39f16f7f..16c512ed6c 100644 --- a/InvenTree/report/api.py +++ b/InvenTree/report/api.py @@ -555,8 +555,8 @@ class POReportList(ReportListView, OrderReportMixin): except: continue - for order in orders: - order_query = order.models.PurchaseOrder.objects.filter(pk=order.pk) + for o in orders: + order_query = order.models.PurchaseOrder.objects.filter(pk=o.pk) try: if not order_query.filter(**filters).exists(): @@ -638,8 +638,8 @@ class SOReportList(ReportListView, OrderReportMixin): except: continue - for order in orders: - order_query = order.models.SalesOrder.objects.filter(pk=order.pk) + for o in orders: + order_query = order.models.SalesOrder.objects.filter(pk=o.pk) try: if not order_query.filter(**filters).exists(): diff --git a/InvenTree/templates/js/report.js b/InvenTree/templates/js/report.js index 6b6ce39db9..741692c56c 100644 --- a/InvenTree/templates/js/report.js +++ b/InvenTree/templates/js/report.js @@ -247,3 +247,111 @@ function printBomReports(parts, options={}) { } ) } + + +function printPurchaseOrderReports(orders, options={}) { + /** + * Print PO reports for the provided purchase order(s) + */ + + if (orders.length == 0) { + showAlertDialog( + '{% trans "Select Purchase Orders" %}', + '{% trans "Purchase Order(s) must be selected before printing report" %}', + ); + + return; + } + + // Request avaiable report templates + inventreeGet( + '{% url "api-po-report-list" %}', + { + enabled: true, + orders: orders, + }, + { + success: function(response) { + if (response.length == 0) { + showAlertDialog( + '{% trans "No Reports Found" %}', + '{% trans "No report templates found which match selected orders" %}', + ); + + return; + } + + // Select report template + selectReport( + response, + orders, + { + success: function(pk) { + var href = `/api/report/po/${pk}/print/?`; + + orders.forEach(function(order) { + href += `order=${order}&`; + }); + + window.location.href = href; + } + } + ) + } + } + ) +} + + +function printSalesOrderReports(orders, options={}) { + /** + * Print SO reports for the provided purchase order(s) + */ + + if (orders.length == 0) { + showAlertDialog( + '{% trans "Select Sales Orders" %}', + '{% trans "Sales Order(s) must be selected before printing report" %}', + ); + + return; + } + + // Request avaiable report templates + inventreeGet( + '{% url "api-so-report-list" %}', + { + enabled: true, + orders: orders, + }, + { + success: function(response) { + if (response.length == 0) { + showAlertDialog( + '{% trans "No Reports Found" %}', + '{% trans "No report templates found which match selected orders" %}', + ); + + return; + } + + // Select report template + selectReport( + response, + orders, + { + success: function(pk) { + var href = `/api/report/so/${pk}/print/?`; + + orders.forEach(function(order) { + href += `order=${order}&`; + }); + + window.location.href = href; + } + } + ) + } + } + ) +}