mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Build order barcodes (#4581)
* Adds barcode support for BuildOrder model * Add barcode_hash to serializer * Add assign functionality for build * Add UI elements
This commit is contained in:
parent
7656f30d02
commit
508dd5425d
@ -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
|
||||
|
23
InvenTree/build/migrations/0040_auto_20230404_1310.py
Normal file
23
InvenTree/build/migrations/0040_auto_20230404_1310.py
Normal file
@ -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'),
|
||||
),
|
||||
]
|
@ -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:
|
||||
|
@ -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.
|
||||
|
@ -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 %}
|
||||
<!-- Barcode actions menu -->
|
||||
<div class='btn-group' role='group'>
|
||||
<button id='barcode-options' title='{% trans "Barcode actions" %}' class='btn btn-outline-secondary dropdown-toggle' type='button' data-bs-toggle='dropdown'>
|
||||
<span class='fas fa-qrcode'></span> <span class='caret'></span>
|
||||
</button>
|
||||
<ul class='dropdown-menu' role='menu'>
|
||||
<li><a class='dropdown-item' href='#' id='show-qr-code'><span class='fas fa-qrcode'></span> {% trans "Show QR Code" %}</a></li>
|
||||
{% if roles.build.change %}
|
||||
{% if order.barcode_hash %}
|
||||
<li><a class='dropdown-item' href='#' id='barcode-unlink'><span class='fas fa-unlink'></span> {% trans "Unlink Barcode" %}</a></li>
|
||||
{% else %}
|
||||
<li><a class='dropdown-item' href='#' id='barcode-link'><span class='fas fa-link'></span> {% trans "Link Barcode" %}</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
||||
<!-- Printing options -->
|
||||
{% if report_enabled %}
|
||||
<div class='btn-group'>
|
||||
@ -90,6 +108,7 @@ src="{% static 'img/blank_image.png' %}"
|
||||
<td>{% trans "Build Description" %}</td>
|
||||
<td>{{ build.title }}</td>
|
||||
</tr>
|
||||
{% include "barcode_data.html" with instance=build %}
|
||||
</table>
|
||||
|
||||
<div class='info-messages'>
|
||||
@ -264,4 +283,33 @@ src="{% static 'img/blank_image.png' %}"
|
||||
);
|
||||
});
|
||||
|
||||
{% if barcodes %}
|
||||
<!-- Barcode functionality callbacks -->
|
||||
$('#show-qr-code').click(function() {
|
||||
showQRDialog(
|
||||
'{% trans "Build Order QR Code" %}',
|
||||
'{"build": {{ build.pk }}}'
|
||||
);
|
||||
});
|
||||
|
||||
{% if roles.purchase_order.change %}
|
||||
$("#barcode-link").click(function() {
|
||||
linkBarcodeDialog(
|
||||
{
|
||||
build: {{ build.pk }},
|
||||
},
|
||||
{
|
||||
title: '{% trans "Link Barcode to Build Order" %}',
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
$("#barcode-unlink").click(function() {
|
||||
unlinkBarcode({
|
||||
build: {{ build.pk }},
|
||||
});
|
||||
});
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
||||
|
@ -11,6 +11,7 @@ import json
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
import build.models
|
||||
import company.models
|
||||
import order.models
|
||||
import part.models
|
||||
@ -34,6 +35,7 @@ class InvenTreeInternalBarcodePlugin(BarcodeMixin, InvenTreePlugin):
|
||||
"""Returns a list of database models which support barcode functionality"""
|
||||
|
||||
return [
|
||||
build.models.Build,
|
||||
company.models.SupplierPart,
|
||||
order.models.PurchaseOrder,
|
||||
order.models.ReturnOrder,
|
||||
|
Loading…
Reference in New Issue
Block a user