src: wv_dataclasses: improved qty_multiplier support for additional items

This commit is contained in:
Laurier Loiselle 2023-03-27 15:35:07 -04:00
parent 7b201eb320
commit 57ec0ea00b
No known key found for this signature in database
GPG Key ID: 345920CC72089A3F

View File

@ -344,8 +344,10 @@ class BomEntry:
), f"Unexpected id type {self.amount}" ), f"Unexpected id type {self.amount}"
self.qty *= self.amount self.qty *= self.amount
if self.qty_multiplier is not None: if self.qty_multiplier is not None:
if not isinstance(self.qty_multiplier, str):
self.qty *= float(self.qty_multiplier) self.qty *= float(self.qty_multiplier)
@property @property
def description_str(self): def description_str(self):
description = self.description description = self.description
@ -563,8 +565,12 @@ class Component:
if self.category is None: if self.category is None:
raise RuntimeError(f"category should be defined for {self}") raise RuntimeError(f"category should be defined for {self}")
def compute_qty_multipliers(self):
pass
@property @property
def bom_entry(self): def bom_entry(self):
self.compute_qty_multipliers()
return BomEntry( return BomEntry(
qty=self.qty, qty=self.qty,
partnumbers=self.partnumbers, partnumbers=self.partnumbers,
@ -744,12 +750,16 @@ class Connector(GraphicalComponent):
"CONNECTIONS": num_connections, "CONNECTIONS": num_connections,
} }
for subitem in self.additional_components: for subitem in self.additional_components:
if isinstance(subitem.qty_multiplier, QtyMultiplierConnector): if isinstance(subitem.qty_multiplier, str):
computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name] computed_factor = qty_multipliers_computed[subitem.qty_multiplier.upper()]
elif isinstance(subitem.qty_multiplier, QtyMultiplierCable): #if isinstance(subitem.qty_multiplier, QtyMultiplierConnector):
raise Exception("Used a cable multiplier in a connector!") # computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name.upper()]
else: # int or float #elif isinstance(subitem.qty_multiplier, QtyMultiplierCable):
# raise Exception("Used a cable multiplier in a connector!")
elif isinstance(subitem.qty_multiplier, int) or isinstance(subitem.qty_multiplier, float):
computed_factor = subitem.qty_multiplier computed_factor = subitem.qty_multiplier
else:
raise ValueError(f'Unexpected qty multiplier "{subitem.qty_multiplier}"')
subitem._qty_multiplier_computed = computed_factor subitem._qty_multiplier_computed = computed_factor
@ -793,6 +803,7 @@ class WireClass(GraphicalComponent):
@property @property
def bom_entry(self): def bom_entry(self):
self.compute_qty_multipliers()
return BomEntry( return BomEntry(
qty=self.length, qty=self.length,
partnumbers=self.partnumbers, partnumbers=self.partnumbers,
@ -1001,6 +1012,7 @@ class Cable(WireClass):
@property @property
def bom_entry(self): def bom_entry(self):
self.compute_qty_multipliers()
if self.is_bundle: if self.is_bundle:
return [w.bom_entry for w in self.wire_objects.values()] return [w.bom_entry for w in self.wire_objects.values()]
else: else:
@ -1175,7 +1187,7 @@ class Cable(WireClass):
if isinstance(subitem.qty_multiplier, QtyMultiplierCable): if isinstance(subitem.qty_multiplier, QtyMultiplierCable):
computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name] computed_factor = qty_multipliers_computed[subitem.qty_multiplier.name]
# inherit component's length unit if appropriate # inherit component's length unit if appropriate
if subitem.qty_multiplier.name in ["LENGTH", "TOTAL_LENGTH"]: if subitem.qty_multiplier.name.upper() in ["LENGTH", "TOTAL_LENGTH"]:
if subitem.qty.unit is not None: if subitem.qty.unit is not None:
raise Exception( raise Exception(
f"No unit may be specified when using" f"No unit may be specified when using"