Add connector aditional bom components
This commit is contained in:
parent
389e48035d
commit
84c9db6a8a
@ -66,6 +66,7 @@ class Connector:
|
|||||||
autogenerate: bool = False
|
autogenerate: bool = False
|
||||||
loops: List[Any] = field(default_factory=list)
|
loops: List[Any] = field(default_factory=list)
|
||||||
ignore_in_bom: bool = False
|
ignore_in_bom: bool = False
|
||||||
|
additional_components: List[Any] = None
|
||||||
|
|
||||||
def __post_init__(self):
|
def __post_init__(self):
|
||||||
|
|
||||||
|
|||||||
@ -332,6 +332,7 @@ class Harness:
|
|||||||
def bom(self):
|
def bom(self):
|
||||||
bom = []
|
bom = []
|
||||||
bom_connectors = []
|
bom_connectors = []
|
||||||
|
bom_connectors_extra = []
|
||||||
bom_cables = []
|
bom_cables = []
|
||||||
bom_extra = []
|
bom_extra = []
|
||||||
# connectors
|
# connectors
|
||||||
@ -351,6 +352,50 @@ class Harness:
|
|||||||
bom_connectors.append(item)
|
bom_connectors.append(item)
|
||||||
bom_connectors = sorted(bom_connectors, key=lambda k: k['item']) # https://stackoverflow.com/a/73050
|
bom_connectors = sorted(bom_connectors, key=lambda k: k['item']) # https://stackoverflow.com/a/73050
|
||||||
bom.extend(bom_connectors)
|
bom.extend(bom_connectors)
|
||||||
|
|
||||||
|
connectors_extra = []
|
||||||
|
for connector in self.connectors.values():
|
||||||
|
if connector.additional_components:
|
||||||
|
for part in connector.additional_components:
|
||||||
|
print(part)
|
||||||
|
if 'qty' in part:
|
||||||
|
if isinstance(part['qty'], int) or isinstance(part['qty'], float):
|
||||||
|
qty = part['qty']
|
||||||
|
else: # check for special quantities
|
||||||
|
if part['qty'] == 'pincount':
|
||||||
|
qty = connector.pincount
|
||||||
|
elif part['qty'] == 'connectioncount':
|
||||||
|
qty = connector.pincount
|
||||||
|
else:
|
||||||
|
raise ValueError('invalid aty parameter')
|
||||||
|
else:
|
||||||
|
qty = 1
|
||||||
|
connectors_extra.append(
|
||||||
|
{
|
||||||
|
'type': part['type'] if 'type' in part else None,
|
||||||
|
'qty': qty,
|
||||||
|
'unit': part['unit'] if 'unit' in part else None,
|
||||||
|
'manufacturer': part['manufacturer'] if 'manufacturer' in part else None,
|
||||||
|
'mpn': part['mpn'] if 'mpn' in part else None,
|
||||||
|
'pn': part['pn'] if 'pn' in part else None,
|
||||||
|
'designator': connector.name
|
||||||
|
}
|
||||||
|
)
|
||||||
|
connector_extra_group = lambda ce: (ce['type'], ce['qty'], ce['unit'], ce['manufacturer'], ce['mpn'], ce['pn'])
|
||||||
|
for group in Counter([connector_extra_group(v) for v in connectors_extra]):
|
||||||
|
items = [v for v in connectors_extra if connector_extra_group(v) == group]
|
||||||
|
shared = items[0]
|
||||||
|
designators = [i['designator'] for i in items]
|
||||||
|
designators = list(dict.fromkeys(designators)) # remove duplicates
|
||||||
|
designators.sort()
|
||||||
|
total_qty = sum(i['qty'] for i in items)
|
||||||
|
|
||||||
|
item = {'item': shared['type'], 'qty': round(total_qty, 3), 'unit': shared['unit'], 'designators': designators,
|
||||||
|
'manufacturer': shared['manufacturer'], 'mpn': shared['mpn'], 'pn': shared['pn']}
|
||||||
|
bom_connectors_extra.append(item)
|
||||||
|
bom_connectors_extra = sorted(bom_connectors_extra, key=lambda k: k['item']) # sort list of dicts by their values (https://stackoverflow.com/a/73050)
|
||||||
|
bom.extend(bom_connectors_extra)
|
||||||
|
|
||||||
# cables
|
# cables
|
||||||
# TODO: If category can have other non-empty values than 'bundle', maybe it should be part of item name?
|
# TODO: If category can have other non-empty values than 'bundle', maybe it should be part of item name?
|
||||||
# The category needs to be included in cable_group to keep the bundles excluded.
|
# The category needs to be included in cable_group to keep the bundles excluded.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user