Changes
This commit is contained in:
@@ -494,16 +494,57 @@ def export_to_xlsx(project_name: str, variant_name: str, schematics: list, bom_d
|
|||||||
|
|
||||||
if bom_data is not None:
|
if bom_data is not None:
|
||||||
match = None
|
match = None
|
||||||
for mfr_name, mpn in pairs:
|
designator = node.get("designator") or ""
|
||||||
if mfr_name == "-" and mpn == "-":
|
ref = comp.get("name") or ""
|
||||||
continue
|
nexar_desc = comp.get("description") or ""
|
||||||
|
|
||||||
|
valid_pairs = [(m, p) for m, p in pairs if m != "-" or p != "-"]
|
||||||
|
|
||||||
|
# --- MPN / manufacturer match ---
|
||||||
|
for mfr_name, mpn in valid_pairs:
|
||||||
match = _find_bom_match(bom_data, mfr_name, mpn)
|
match = _find_bom_match(bom_data, mfr_name, mpn)
|
||||||
if match:
|
if match:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
# --- Passive fallback (R / C) ---
|
||||||
if not match:
|
if not match:
|
||||||
match = _find_passive_bom_match(
|
match = _find_passive_bom_match(bom_data, designator, params, nexar_desc)
|
||||||
bom_data, node.get("designator") or "", params, comp.get("description") or ""
|
|
||||||
)
|
# --- Diagnostics when no match ---
|
||||||
|
if not match:
|
||||||
|
if not valid_pairs:
|
||||||
|
print(f" NO MATCH [{designator}] {ref}: no manufacturer data in Nexar")
|
||||||
|
else:
|
||||||
|
tried_mpns = [p for _, p in valid_pairs]
|
||||||
|
# Check if any Nexar MPN exists in BOM ignoring manufacturer
|
||||||
|
mpn_in_bom = next(
|
||||||
|
(e for e in bom_data for mpn in tried_mpns if _mpn_match(e["mpn"], mpn)),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
if mpn_in_bom:
|
||||||
|
print(
|
||||||
|
f" NO MATCH [{designator}] {ref}: "
|
||||||
|
f"MPN '{mpn_in_bom['mpn']}' found in BOM but manufacturer differs "
|
||||||
|
f"(BOM: '{mpn_in_bom['manufacturer']}' vs Nexar: '{valid_pairs[0][0]}')"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
# Check if BOM has the manufacturer but with a different MPN
|
||||||
|
mfr_in_bom = next(
|
||||||
|
(e for e in bom_data for mfr, _ in valid_pairs if _prefix_match(e["manufacturer"], mfr)),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
if mfr_in_bom:
|
||||||
|
print(
|
||||||
|
f" NO MATCH [{designator}] {ref}: "
|
||||||
|
f"manufacturer '{mfr_in_bom['manufacturer']}' found in BOM "
|
||||||
|
f"but MPN differs (BOM: '{mfr_in_bom['mpn']}' vs Nexar: {tried_mpns})"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
print(
|
||||||
|
f" NO MATCH [{designator}] {ref}: "
|
||||||
|
f"Nexar MPN(s) {tried_mpns} not found in BOM at all"
|
||||||
|
)
|
||||||
|
|
||||||
if match:
|
if match:
|
||||||
row += [match["manufacturer"], match["mpn"], match["unit_cost"]]
|
row += [match["manufacturer"], match["mpn"], match["unit_cost"]]
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user