feat(stock): Support more barcodes in an item by validate the barcode with the barcodenumber module (#33863)
feat(stock): Support more barcodes in an article by validate the barcode with the barcodenumber module
This commit is contained in:
parent
c722f2819c
commit
2a90fad710
@ -358,7 +358,7 @@ class Item(Document):
|
|||||||
check_list.append(d.item_tax_template)
|
check_list.append(d.item_tax_template)
|
||||||
|
|
||||||
def validate_barcode(self):
|
def validate_barcode(self):
|
||||||
from stdnum import ean
|
import barcodenumber
|
||||||
|
|
||||||
if len(self.barcodes) > 0:
|
if len(self.barcodes) > 0:
|
||||||
for item_barcode in self.barcodes:
|
for item_barcode in self.barcodes:
|
||||||
@ -376,19 +376,16 @@ class Item(Document):
|
|||||||
item_barcode.barcode_type = (
|
item_barcode.barcode_type = (
|
||||||
"" if item_barcode.barcode_type not in options else item_barcode.barcode_type
|
"" if item_barcode.barcode_type not in options else item_barcode.barcode_type
|
||||||
)
|
)
|
||||||
if item_barcode.barcode_type and item_barcode.barcode_type.upper() in (
|
if item_barcode.barcode_type:
|
||||||
"EAN",
|
barcode_type = convert_erpnext_to_barcodenumber(item_barcode.barcode_type.upper())
|
||||||
"UPC-A",
|
if barcode_type in barcodenumber.barcodes():
|
||||||
"EAN-13",
|
if not barcodenumber.check_code(barcode_type, item_barcode.barcode):
|
||||||
"EAN-8",
|
frappe.throw(
|
||||||
):
|
_("Barcode {0} is not a valid {1} code").format(
|
||||||
if not ean.is_valid(item_barcode.barcode):
|
item_barcode.barcode, item_barcode.barcode_type
|
||||||
frappe.throw(
|
),
|
||||||
_("Barcode {0} is not a valid {1} code").format(
|
InvalidBarcode,
|
||||||
item_barcode.barcode, item_barcode.barcode_type
|
)
|
||||||
),
|
|
||||||
InvalidBarcode,
|
|
||||||
)
|
|
||||||
|
|
||||||
def validate_warehouse_for_reorder(self):
|
def validate_warehouse_for_reorder(self):
|
||||||
"""Validate Reorder level table for duplicate and conditional mandatory"""
|
"""Validate Reorder level table for duplicate and conditional mandatory"""
|
||||||
@ -985,6 +982,22 @@ class Item(Document):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def convert_erpnext_to_barcodenumber(erpnext_number):
|
||||||
|
convert = {
|
||||||
|
"UPC-A": "UPCA",
|
||||||
|
"CODE-39": "CODE39",
|
||||||
|
"EAN": "EAN13",
|
||||||
|
"EAN-12": "EAN",
|
||||||
|
"EAN-8": "EAN8",
|
||||||
|
"ISBN-10": "ISBN10",
|
||||||
|
"ISBN-13": "ISBN13",
|
||||||
|
}
|
||||||
|
if erpnext_number in convert:
|
||||||
|
return convert[erpnext_number]
|
||||||
|
else:
|
||||||
|
return erpnext_number
|
||||||
|
|
||||||
|
|
||||||
def make_item_price(item, price_list_name, item_price):
|
def make_item_price(item, price_list_name, item_price):
|
||||||
frappe.get_doc(
|
frappe.get_doc(
|
||||||
{
|
{
|
||||||
|
@ -579,6 +579,19 @@ class TestItem(FrappeTestCase):
|
|||||||
{
|
{
|
||||||
"barcode": "ARBITRARY_TEXT",
|
"barcode": "ARBITRARY_TEXT",
|
||||||
},
|
},
|
||||||
|
{"barcode": "72527273070", "barcode_type": "UPC-A"},
|
||||||
|
{"barcode": "123456", "barcode_type": "CODE-39"},
|
||||||
|
{"barcode": "401268452363", "barcode_type": "EAN-12"},
|
||||||
|
{"barcode": "90311017", "barcode_type": "EAN-8"},
|
||||||
|
{"barcode": "0123456789012", "barcode_type": "GS1"},
|
||||||
|
{"barcode": "2211564566668", "barcode_type": "GTIN"},
|
||||||
|
{"barcode": "0256480249", "barcode_type": "ISBN"},
|
||||||
|
{"barcode": "0192552570", "barcode_type": "ISBN-10"},
|
||||||
|
{"barcode": "9781234567897", "barcode_type": "ISBN-13"},
|
||||||
|
{"barcode": "9771234567898", "barcode_type": "ISSN"},
|
||||||
|
{"barcode": "4581171967072", "barcode_type": "JAN"},
|
||||||
|
{"barcode": "12345678", "barcode_type": "PZN"},
|
||||||
|
{"barcode": "725272730706", "barcode_type": "UPC"},
|
||||||
]
|
]
|
||||||
create_item(item_code)
|
create_item(item_code)
|
||||||
for barcode_properties in barcode_properties_list:
|
for barcode_properties in barcode_properties_list:
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"in_list_view": 1,
|
"in_list_view": 1,
|
||||||
"label": "Barcode Type",
|
"label": "Barcode Type",
|
||||||
"options": "\nEAN\nUPC-A"
|
"options": "\nEAN\nUPC-A\nCODE-39\nEAN-12\nEAN-8\nGS1\nGTIN\nISBN\nISBN-10\nISBN-13\nISSN\nJAN\nPZN\nUPC"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "uom",
|
"fieldname": "uom",
|
||||||
|
@ -12,6 +12,7 @@ dependencies = [
|
|||||||
"pycountry~=20.7.3",
|
"pycountry~=20.7.3",
|
||||||
"python-stdnum~=1.16",
|
"python-stdnum~=1.16",
|
||||||
"Unidecode~=1.2.0",
|
"Unidecode~=1.2.0",
|
||||||
|
"barcodenumber~=0.5.0",
|
||||||
|
|
||||||
# integration dependencies
|
# integration dependencies
|
||||||
"gocardless-pro~=1.22.0",
|
"gocardless-pro~=1.22.0",
|
||||||
|
Loading…
Reference in New Issue
Block a user