2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-11 07:24:15 +00:00

Hide part toolbar, nicer part representation, improved parameters prefetching

This commit is contained in:
eeintech
2020-10-01 10:03:49 -05:00
parent a71b5ef0a0
commit b7d25a75c4
4 changed files with 82 additions and 19 deletions

View File

@ -111,11 +111,20 @@ class PartCategory(InvenTreeTree):
""" True if there are any parts in this category """
return self.partcount() > 0
def get_unique_parameters(self, cascade=True):
def prefetch_parts_parameters(self, cascade=True):
""" Prefectch parts parameters """
return self.get_parts(cascade=cascade).prefetch_related('parameters', 'parameters__template')
def get_unique_parameters(self, cascade=True, prefetch=None):
""" Get all unique parameter names for all parts from this category """
unique_parameters_names = []
parts = self.get_parts(cascade=cascade).prefetch_related('parameters', 'parameters__template')
if prefetch:
parts = prefetch
else:
parts = self.prefetch_parts_parameters(cascade=cascade)
for part in parts:
for parameter in part.parameters.all():
@ -123,19 +132,28 @@ class PartCategory(InvenTreeTree):
if parameter_name not in unique_parameters_names:
unique_parameters_names.append(parameter_name)
return unique_parameters_names
return sorted(unique_parameters_names)
def get_parts_parameters(self, cascade=True):
def get_parts_parameters(self, cascade=True, prefetch=None):
""" Get all parameter names and values for all parts from this category """
category_parameters = []
parts = self.get_parts(cascade=cascade).prefetch_related('parameters', 'parameters__template')
if prefetch:
parts = prefetch
else:
parts = self.prefetch_parts_parameters(cascade=cascade)
for part in parts:
part_parameters = {
'IPN': part.IPN,
'Name': part.name,
'pk': part.pk,
'name': part.name,
'description': part.description,
}
# Add IPN only if it exists
if part.IPN:
part_parameters['IPN'] = part.IPN
for parameter in part.parameters.all():
parameter_name = parameter.template.name
parameter_value = parameter.data