mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-28 11:36:44 +00:00
* Add support for scanning digikey and mouser barcodes * added small fixes if no part is found * made small style cleanups * Separate out ecia 2d barcode parser, Add quantity, PO number to response * Use model instead of name for mouser supplier, add auto detection magic * Add lcsc barcode support * Move barcode plugins to new suppliers subdirectory * Add get_supplier_part helper, Refactor plugins in preparation for #3791 * Add __init__.py to suppliers directory * Improve formatting * Add barcode integration tests * Add api-barcode-po-receive endpoint * Refactor supplier_barcode.py helpers into BarcodeMixin * Implement the api-barcode-po-receive endpoint for all suppliers * Always include lineitem in api response * Fix location in response, only include quantity and location if set * Check if barcode has already been assigned, Fix tests * FIx quantity and location not being in lineitem reponse * Use part.get_default_location() instead of part.default_location * Fix fomatting again * Fix type annotations for python 3.8 * Add get_supplier_part helper, check for barcode_data being a str * Fix naming clash * Clarify return type for scan_receive_item * Improve model access using first() in two places * Refactor a bunch of checks * Improve selection of line item, if multiple line items match the SKU * Add new api version for this PR * Fix error if no line item exists * Add debug print to investigate why tests are failing * Remove the test print again * Fix pre formatted log messages * Test removing all plugins * Test only with digikey plugin * Test with all plugins, but without mouser "model" setting * Test again without tests * Test with simple tests * Test with simple receive test * Test with even more receive tests * Test second receive test * Test third receive test * Test 4th receive test with debug prints * Try deleting the stock item and stock locations * Disable the test again * Add SupplierBarcodeMixin to minimize shared code between plugins * Add TME supplier barcode plugin * Remove the TME tests again * If this works the tests are broken, if this doesn't work the tests are broken too * Add TME tests again * Add back all tests again * Fix TME purchase order number * Fix TME qrcode regex * Add documentation for this feature * Fix TME qrcode regex * Use Decimal instead of int for quantity * Refactor get_supplier_parts, Add get_supplier method * Improve docstrings * Fix None type access * FIx TME barcode detection, Improve supplier barcode handling * Try to retrigger pipeline * Refactor get_supplier_parts to not use lists * Add DEFAULT_SUPPLIER_NAME to mouser plugin * Add SUPPLIER_ID setting to other suppliers * Fix supplier plugins not inheriting from settings mixin --------- Co-authored-by: Matthias Mair <code@mjmair.com>
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
"""The DigiKeyPlugin is meant to integrate the DigiKey API into Inventree.
|
|
|
|
This plugin can currently only match DigiKey barcodes to supplier parts.
|
|
"""
|
|
|
|
import logging
|
|
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from plugin import InvenTreePlugin
|
|
from plugin.base.barcodes.mixins import SupplierBarcodeData
|
|
from plugin.mixins import SettingsMixin, SupplierBarcodeMixin
|
|
|
|
logger = logging.getLogger('inventree')
|
|
|
|
|
|
class DigiKeyPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
|
|
"""Plugin to integrate the DigiKey API into Inventree."""
|
|
|
|
NAME = "DigiKeyPlugin"
|
|
TITLE = _("Supplier Integration - DigiKey")
|
|
DESCRIPTION = _("Provides support for scanning DigiKey barcodes")
|
|
VERSION = "1.0.0"
|
|
AUTHOR = _("InvenTree contributors")
|
|
|
|
DEFAULT_SUPPLIER_NAME = "DigiKey"
|
|
SETTINGS = {
|
|
"SUPPLIER_ID": {
|
|
"name": _("Supplier"),
|
|
"description": _("The Supplier which acts as 'DigiKey'"),
|
|
"model": "company.company",
|
|
}
|
|
}
|
|
|
|
def parse_supplier_barcode_data(self, barcode_data):
|
|
"""Get supplier_part and barcode_fields from DigiKey DataMatrix-Code."""
|
|
|
|
if not isinstance(barcode_data, str):
|
|
return None
|
|
|
|
if not (barcode_fields := self.parse_ecia_barcode2d(barcode_data)):
|
|
return None
|
|
|
|
return SupplierBarcodeData(
|
|
SKU=barcode_fields.get("supplier_part_number"),
|
|
MPN=barcode_fields.get("manufacturer_part_number"),
|
|
quantity=barcode_fields.get("quantity"),
|
|
order_number=barcode_fields.get("purchase_order_number"),
|
|
)
|