diff --git a/InvenTree/label/models.py b/InvenTree/label/models.py
index c506d796db..6faf966d7e 100644
--- a/InvenTree/label/models.py
+++ b/InvenTree/label/models.py
@@ -43,6 +43,12 @@ class LabelTemplate(models.Model):
def template(self):
return self.label.path
+ def __str__(self):
+ return "{n} - {d}".format(
+ n=self.name,
+ d=self.description
+ )
+
name = models.CharField(
unique=True,
blank=False, max_length=100,
@@ -137,6 +143,7 @@ class StockItemLabel(LabelTemplate):
'uid': item.uid,
'pk': item.pk,
'qr_data': item.format_short_barcode(),
+ 'tests': item.testResultMap()
})
return records
diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py
index 06d90e33df..234da6d53b 100644
--- a/InvenTree/stock/forms.py
+++ b/InvenTree/stock/forms.py
@@ -178,6 +178,37 @@ class SerializeStockForm(HelperForm):
]
+class StockItemLabelSelectForm(HelperForm):
+ """ Form for selecting a label template for a StockItem """
+
+ label = forms.ChoiceField(
+ label=_('Label'),
+ help_text=_('Select test report template')
+ )
+
+ class Meta:
+ model = StockItem
+ fields = [
+ 'label',
+ ]
+
+ def get_label_choices(self, labels):
+
+ choices = []
+
+ if len(labels) > 0:
+ for label in labels:
+ choices.append((label.pk, label))
+
+ return choices
+
+ def __init__(self, labels, *args, **kwargs):
+
+ super().__init__(*args, **kwargs)
+
+ self.fields['label'].choices = self.get_label_choices(labels)
+
+
class TestReportFormatForm(HelperForm):
""" Form for selection a test report template """
diff --git a/InvenTree/stock/templates/stock/item_base.html b/InvenTree/stock/templates/stock/item_base.html
index ce055d65c5..a7bc263bbf 100644
--- a/InvenTree/stock/templates/stock/item_base.html
+++ b/InvenTree/stock/templates/stock/item_base.html
@@ -129,6 +129,9 @@ InvenTree | {% trans "Stock Item" %} - {{ item }}
{% endif %}
+
{% endblock %}
@@ -314,6 +317,15 @@ $("#stock-test-report").click(function() {
});
{% endif %}
+$("#stock-print-label").click(function() {
+ launchModalForm(
+ "{% url 'stock-item-label-select' item.id %}",
+ {
+ follow: true,
+ }
+ )
+});
+
$("#stock-duplicate").click(function() {
launchModalForm(
"{% url 'stock-item-create' %}",
diff --git a/InvenTree/stock/urls.py b/InvenTree/stock/urls.py
index c886f8ccaa..51067b57de 100644
--- a/InvenTree/stock/urls.py
+++ b/InvenTree/stock/urls.py
@@ -29,6 +29,7 @@ stock_item_detail_urls = [
url(r'^add_tracking/', views.StockItemTrackingCreate.as_view(), name='stock-tracking-create'),
url(r'^test-report-select/', views.StockItemTestReportSelect.as_view(), name='stock-item-test-report-select'),
+ url(r'^label-select/', views.StockItemSelectLabels.as_view(), name='stock-item-label-select'),
url(r'^test/', views.StockItemDetail.as_view(template_name='stock/item_tests.html'), name='stock-item-test-results'),
url(r'^children/', views.StockItemDetail.as_view(template_name='stock/item_childs.html'), name='stock-item-children'),
diff --git a/InvenTree/stock/views.py b/InvenTree/stock/views.py
index 5a5cba9126..1c9b78a3f0 100644
--- a/InvenTree/stock/views.py
+++ b/InvenTree/stock/views.py
@@ -296,6 +296,50 @@ class StockItemReturnToStock(AjaxUpdateView):
return self.renderJsonResponse(request, self.get_form(), data)
+class StockItemSelectLabels(AjaxView):
+ """
+ View for selecting a template for printing labels for one (or more) StockItem objects
+ """
+
+ model = StockItem
+ ajax_form_title = _('Select Label Template')
+
+ def get_form(self):
+
+ item = StockItem.objects.get(pk=self.kwargs['pk'])
+
+ labels = []
+
+ for label in StockItemLabel.objects.all():
+ if label.matches_stock_item(item):
+ labels.append(label)
+
+ return StockForms.StockItemLabelSelectForm(labels)
+
+ def post(self, request, *args, **kwargs):
+
+ label = request.POST.get('label', None)
+
+ try:
+ label = StockItemLabel.objects.get(pk=label)
+ except (ValueError, StockItemLabel.DoesNotExist):
+ raise ValidationError({'label': _("Select valid label")})
+
+ stock_item = StockItem.objects.get(pk=self.kwargs['pk'])
+
+ url = reverse('stock-item-print-labels')
+
+ url += '?label={pk}'.format(pk=label.pk)
+ url += '&items[]={pk}'.format(pk=stock_item.pk)
+
+ data = {
+ 'form_valid': True,
+ 'url': url,
+ }
+
+ return self.renderJsonResponse(request, self.get_form(), data=data)
+
+
class StockItemPrintLabels(AjaxView):
"""
View for printing labels and returning a PDF