2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-29 20:16:44 +00:00

Merge pull request #2720 from SchrodingersGat/barcode-scan-fix

Barcode scan fix

(cherry picked from commit bcc4267827317534030bd70e0ada36eed22ae1d7)
This commit is contained in:
Oliver 2022-03-07 12:25:46 +11:00
parent 718e729059
commit 436a33c5de
3 changed files with 65 additions and 1 deletions

View File

@ -12,6 +12,7 @@ from rest_framework.views import APIView
from stock.models import StockItem from stock.models import StockItem
from stock.serializers import StockItemSerializer from stock.serializers import StockItemSerializer
from barcodes.plugins.inventree_barcode import InvenTreeBarcodePlugin
from barcodes.barcode import hash_barcode from barcodes.barcode import hash_barcode
from plugin import registry from plugin import registry
@ -57,6 +58,9 @@ class BarcodeScan(APIView):
barcode_data = data.get('barcode') barcode_data = data.get('barcode')
# Ensure that the default barcode handler is installed
plugins.append(InvenTreeBarcodePlugin())
# Look for a barcode plugin which knows how to deal with this barcode # Look for a barcode plugin which knows how to deal with this barcode
plugin = None plugin = None

View File

@ -52,7 +52,7 @@ class InvenTreeBarcodePlugin(BarcodePlugin):
# If any of the following keys are in the JSON data, # If any of the following keys are in the JSON data,
# let's go ahead and assume that the code is a valid InvenTree one... # let's go ahead and assume that the code is a valid InvenTree one...
for key in ['tool', 'version', 'InvenTree', 'stockitem', 'location', 'part']: for key in ['tool', 'version', 'InvenTree', 'stockitem', 'stocklocation', 'part']:
if key in self.data.keys(): if key in self.data.keys():
return True return True

View File

@ -56,6 +56,66 @@ class BarcodeAPITest(APITestCase):
self.assertIn('plugin', data) self.assertIn('plugin', data)
self.assertIsNone(data['plugin']) self.assertIsNone(data['plugin'])
def test_find_part(self):
"""
Test that we can lookup a part based on ID
"""
response = self.client.post(
self.scan_url,
{
'barcode': {
'part': 1,
},
},
format='json',
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('part', response.data)
self.assertIn('barcode_data', response.data)
self.assertEqual(response.data['part']['pk'], 1)
def test_find_stock_item(self):
"""
Test that we can lookup a stock item based on ID
"""
response = self.client.post(
self.scan_url,
{
'barcode': {
'stockitem': 1,
}
},
format='json',
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('stockitem', response.data)
self.assertIn('barcode_data', response.data)
self.assertEqual(response.data['stockitem']['pk'], 1)
def test_find_location(self):
"""
Test that we can lookup a stock location based on ID
"""
response = self.client.post(
self.scan_url,
{
'barcode': {
'stocklocation': 1,
},
},
format='json'
)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertIn('stocklocation', response.data)
self.assertIn('barcode_data', response.data)
self.assertEqual(response.data['stocklocation']['pk'], 1)
def test_integer_barcode(self): def test_integer_barcode(self):
response = self.postBarcode(self.scan_url, '123456789') response = self.postBarcode(self.scan_url, '123456789')