2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-04-28 11:36:44 +00:00

Fix supplier barcode order numbers (#6158) (#6239)

* Add tme barcode CPO field

* Fix LCSC order number field

* Fix mouser order number field

* Fix get_purchase_orders logic

* Refine get_purchase_orders logic

* Slightly refactor get_purchase_orders logic
This commit is contained in:
Bobbe 2024-01-14 03:05:14 +01:00 committed by GitHub
parent f259fa6792
commit 2b0ef2bc61
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 9 deletions

View File

@ -6,7 +6,7 @@ import logging
from decimal import Decimal, InvalidOperation from decimal import Decimal, InvalidOperation
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.db.models import F from django.db.models import F, Q
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from company.models import Company, SupplierPart from company.models import Company, SupplierPart
@ -347,12 +347,17 @@ class SupplierBarcodeMixin(BarcodeMixin):
if supplier: if supplier:
orders = orders.filter(supplier=supplier) orders = orders.filter(supplier=supplier)
if customer_order_number: # this works because reference and supplier_reference are not nullable, so if
orders = orders.filter(reference__iexact=customer_order_number) # customer_order_number or supplier_order_number is None, the query won't return anything
elif supplier_order_number: reference_filter = Q(reference__iexact=customer_order_number)
orders = orders.filter(supplier_reference__iexact=supplier_order_number) supplier_reference_filter = Q(supplier_reference__iexact=supplier_order_number)
return orders orders_union = orders.filter(reference_filter | supplier_reference_filter)
if orders_union.count() == 1:
return orders_union
else:
orders_intersection = orders.filter(reference_filter & supplier_reference_filter)
return orders_intersection if orders_intersection else orders_union
@staticmethod @staticmethod
def get_supplier_parts(sku: str = None, supplier: Company = None, mpn: str = None): def get_supplier_parts(sku: str = None, supplier: Company = None, mpn: str = None):

View File

@ -36,7 +36,7 @@ class LCSCPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
"pm": SupplierBarcodeMixin.MANUFACTURER_PART_NUMBER, "pm": SupplierBarcodeMixin.MANUFACTURER_PART_NUMBER,
"pc": SupplierBarcodeMixin.SUPPLIER_PART_NUMBER, "pc": SupplierBarcodeMixin.SUPPLIER_PART_NUMBER,
"qty": SupplierBarcodeMixin.QUANTITY, "qty": SupplierBarcodeMixin.QUANTITY,
"on": SupplierBarcodeMixin.CUSTOMER_ORDER_NUMBER, "on": SupplierBarcodeMixin.SUPPLIER_ORDER_NUMBER,
} }
def extract_barcode_fields(self, barcode_data: str) -> dict[str, str]: def extract_barcode_fields(self, barcode_data: str) -> dict[str, str]:

View File

@ -30,4 +30,11 @@ class MouserPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
def extract_barcode_fields(self, barcode_data: str) -> dict[str, str]: def extract_barcode_fields(self, barcode_data: str) -> dict[str, str]:
"""Get supplier_part and barcode_fields from Mouser DataMatrix-Code.""" """Get supplier_part and barcode_fields from Mouser DataMatrix-Code."""
return self.parse_ecia_barcode2d(barcode_data) barcode_fields = self.parse_ecia_barcode2d(barcode_data)
# Mouser uses the custom order number ('K') field of the 2D barcode for both,
# the order number and the customer order number
if order_number := barcode_fields.get(self.CUSTOMER_ORDER_NUMBER):
barcode_fields.setdefault(self.SUPPLIER_ORDER_NUMBER, order_number)
return barcode_fields

View File

@ -35,7 +35,8 @@ class TMEPlugin(SupplierBarcodeMixin, SettingsMixin, InvenTreePlugin):
# Custom field mapping # Custom field mapping
TME_QRCODE_FIELDS = { TME_QRCODE_FIELDS = {
"PN": SupplierBarcodeMixin.SUPPLIER_PART_NUMBER, "PN": SupplierBarcodeMixin.SUPPLIER_PART_NUMBER,
"PO": SupplierBarcodeMixin.CUSTOMER_ORDER_NUMBER, "CPO": SupplierBarcodeMixin.CUSTOMER_ORDER_NUMBER,
"PO": SupplierBarcodeMixin.SUPPLIER_ORDER_NUMBER,
"MPN": SupplierBarcodeMixin.MANUFACTURER_PART_NUMBER, "MPN": SupplierBarcodeMixin.MANUFACTURER_PART_NUMBER,
"QTY": SupplierBarcodeMixin.QUANTITY, "QTY": SupplierBarcodeMixin.QUANTITY,
} }