Barcode scan fix (#3727)

* Fix barcode scanning in web interface

* Improve error handling for barcode scan dialog

* JS linting
This commit is contained in:
Oliver 2022-09-28 10:28:39 +10:00 committed by GitHub
parent 7568d23670
commit 8bcf72fbb2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 48 additions and 16 deletions

View File

@ -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):

View File

@ -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 = `<div class='alert alert-block alert-${style}'>`;
@ -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}'`
);
}
@ -320,12 +342,11 @@ 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';
@ -333,11 +354,12 @@ function barcodeScanDialog() {
'{% 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,