Skip to content

Commit

Permalink
Barcode scan fix (#3727)
Browse files Browse the repository at this point in the history
* Fix barcode scanning in web interface

* Improve error handling for barcode scan dialog

* JS linting
  • Loading branch information
SchrodingersGat committed Sep 28, 2022
1 parent 7568d23 commit 8bcf72f
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 16 deletions.
18 changes: 14 additions & 4 deletions InvenTree/plugin/builtin/barcodes/inventree_barcode.py
Expand Up @@ -34,19 +34,29 @@ def get_supported_barcode_models():
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

response = {
label: data
}

if url is not None:
response['url'] = url

return {label: response}
return response


class InvenTreeInternalBarcodePlugin(InvenTreeBarcodePlugin):
Expand Down
46 changes: 34 additions & 12 deletions InvenTree/templates/js/translated/barcode.js
Expand Up @@ -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);
Expand Down Expand Up @@ -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 = `<div class='alert alert-block alert-${style}'>`;
Expand All @@ -179,7 +198,10 @@ function showBarcodeMessage(modal, message, style='danger') {


function showInvalidResponseError(modal, response, status) {
showBarcodeMessage(modal, `{% trans "Invalid server response" %}<br>{% trans "Status" %}: '${status}'`);
showBarcodeMessage(
modal,
`{% trans "Invalid server response" %}<br>{% trans "Status" %}: '${status}'`
);
}


Expand Down Expand Up @@ -320,24 +342,24 @@ function barcodeDialog(title, options={}) {
$(modal).modal('show');
}


/*
* Perform a barcode scan,
* and (potentially) redirect the browser
*/
function barcodeScanDialog() {
/*
* Perform a barcode scan,
* and (potentially) redirect the browser
*/

var modal = '#modal-form';

barcodeDialog(
'{% trans "Scan Barcode" %}',
{
onScan: function(response) {
if ('url' in response) {
$(modal).modal('hide');

// Redirect to the URL!
window.location.href = response.url;
var url = response.url;

if (url) {
$(modal).modal('hide');
window.location.href = url;
} else {
showBarcodeMessage(
modal,
Expand Down

0 comments on commit 8bcf72f

Please sign in to comment.