diff --git a/InvenTree/InvenTree/api_version.py b/InvenTree/InvenTree/api_version.py index 21cff45c72..33222ebe75 100644 --- a/InvenTree/InvenTree/api_version.py +++ b/InvenTree/InvenTree/api_version.py @@ -11,6 +11,7 @@ v107 -> 2023-04-04 : https://github.com/inventree/InvenTree/pull/4575 - Adds barcode support for PurchaseOrder model - Adds barcode support for ReturnOrder model - Adds barcode support for SalesOrder model + - Adds barcode support for BuildOrder model v106 -> 2023-04-03 : https://github.com/inventree/InvenTree/pull/4566 - Adds 'search_regex' parameter to all searchable API endpoints diff --git a/InvenTree/build/migrations/0040_auto_20230404_1310.py b/InvenTree/build/migrations/0040_auto_20230404_1310.py new file mode 100644 index 0000000000..fcb29e7e3a --- /dev/null +++ b/InvenTree/build/migrations/0040_auto_20230404_1310.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.18 on 2023-04-04 13:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('build', '0039_auto_20230317_0816'), + ] + + operations = [ + migrations.AddField( + model_name='build', + name='barcode_data', + field=models.CharField(blank=True, help_text='Third party barcode data', max_length=500, verbose_name='Barcode Data'), + ), + migrations.AddField( + model_name='build', + name='barcode_hash', + field=models.CharField(blank=True, help_text='Unique hash of barcode data', max_length=128, verbose_name='Barcode Hash'), + ), + ] diff --git a/InvenTree/build/models.py b/InvenTree/build/models.py index a56b69978d..7ac1c0f6e0 100644 --- a/InvenTree/build/models.py +++ b/InvenTree/build/models.py @@ -23,7 +23,7 @@ from rest_framework import serializers from InvenTree.status_codes import BuildStatus, StockStatus, StockHistoryCode from InvenTree.helpers import increment, normalize, notify_responsible -from InvenTree.models import InvenTreeAttachment, ReferenceIndexingMixin +from InvenTree.models import InvenTreeAttachment, InvenTreeBarcodeMixin, ReferenceIndexingMixin from build.validators import generate_next_build_reference, validate_build_order_reference @@ -42,7 +42,7 @@ import stock.models import users.models -class Build(MPTTModel, MetadataMixin, ReferenceIndexingMixin): +class Build(MPTTModel, InvenTreeBarcodeMixin, MetadataMixin, ReferenceIndexingMixin): """A Build object organises the creation of new StockItem objects from other existing StockItem objects. Attributes: diff --git a/InvenTree/build/serializers.py b/InvenTree/build/serializers.py index 5bacad8845..3ac30928bd 100644 --- a/InvenTree/build/serializers.py +++ b/InvenTree/build/serializers.py @@ -37,6 +37,7 @@ class BuildSerializer(InvenTreeModelSerializer): 'pk', 'url', 'title', + 'barcode_hash', 'batch', 'creation_date', 'completed', @@ -84,6 +85,8 @@ class BuildSerializer(InvenTreeModelSerializer): responsible_detail = OwnerSerializer(source='responsible', read_only=True) + barcode_hash = serializers.CharField(read_only=True) + @staticmethod def annotate_queryset(queryset): """Add custom annotations to the BuildSerializer queryset, performing database queries as efficiently as possible. diff --git a/InvenTree/build/templates/build/build_base.html b/InvenTree/build/templates/build/build_base.html index e02112c6bf..f0aff38766 100644 --- a/InvenTree/build/templates/build/build_base.html +++ b/InvenTree/build/templates/build/build_base.html @@ -33,6 +33,24 @@ src="{% static 'img/blank_image.png' %}" {% url 'admin:build_build_change' build.pk as url %} {% include "admin_button.html" with url=url %} {% endif %} +{% if barcodes %} + +