diff --git a/InvenTree/plugin/builtin/barcodes/inventree_barcode.py b/InvenTree/plugin/builtin/barcodes/inventree_barcode.py index 1b7594870e..4fbe20ca27 100644 --- a/InvenTree/plugin/builtin/barcodes/inventree_barcode.py +++ b/InvenTree/plugin/builtin/barcodes/inventree_barcode.py @@ -34,19 +34,29 @@ class InvenTreeBarcodePlugin(BarcodeMixin, InvenTreePlugin): def format_matched_response(self, label, model, instance): """Format a response for the scanned data""" - response = { + data = { 'pk': instance.pk } # Add in the API URL if available if hasattr(model, 'get_api_url'): - response['api_url'] = f"{model.get_api_url()}{instance.pk}/" + data['api_url'] = f"{model.get_api_url()}{instance.pk}/" # Add in the web URL if available if hasattr(instance, 'get_absolute_url'): - response['web_url'] = instance.get_absolute_url() + url = instance.get_absolute_url() + data['web_url'] = url + else: + url = None - return {label: response} + response = { + label: data + } + + if url is not None: + response['url'] = url + + return response class InvenTreeInternalBarcodePlugin(InvenTreeBarcodePlugin): diff --git a/InvenTree/templates/js/translated/barcode.js b/InvenTree/templates/js/translated/barcode.js index 818be0106b..de0105798d 100644 --- a/InvenTree/templates/js/translated/barcode.js +++ b/InvenTree/templates/js/translated/barcode.js @@ -129,9 +129,25 @@ function postBarcodeData(barcode_data, options={}) { data, { method: 'POST', - error: function() { + error: function(xhr) { + enableBarcodeInput(modal, true); - showBarcodeMessage(modal, '{% trans "Server error" %}'); + + switch (xhr.status || 0) { + case 400: + // No match for barcode, most likely + console.log(xhr); + + data = xhr.responseJSON || {}; + showBarcodeMessage(modal, data.error || '{% trans "Server error" %}'); + + break; + default: + // Any other error code means something went wrong + $(modal).modal('hide'); + + showApiError(xhr, url); + } }, success: function(response, status) { modalEnable(modal, false); @@ -166,6 +182,9 @@ function postBarcodeData(barcode_data, options={}) { } +/* + * Display a message within the barcode scanning dialog + */ function showBarcodeMessage(modal, message, style='danger') { var html = `