Skip to content

Commit 60ec998

Browse files
[bug] BOM exporter (inventree#11038)
* [bug] BOM exporter - Ensure sub-items are correctly annotated for multi-level BOM export * Remove debug statements
1 parent 00091ca commit 60ec998

1 file changed

Lines changed: 17 additions & 6 deletions

File tree

src/backend/InvenTree/plugin/builtin/exporter/bom_exporter.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
from InvenTree.helpers import normalize
1111
from part.models import BomItem
12+
from part.serializers import BomItemSerializer
1213
from plugin import InvenTreePlugin
1314
from plugin.mixins import DataExportMixin
1415

@@ -76,7 +77,10 @@ class BomExporterPlugin(DataExportMixin, InvenTreePlugin):
7677

7778
def supports_export(self, model_class: type, user, *args, **kwargs) -> bool:
7879
"""This exported only supports the BomItem model."""
79-
return model_class == BomItem
80+
return (
81+
model_class == BomItem
82+
and kwargs.get('serializer_class') == BomItemSerializer
83+
)
8084

8185
def update_headers(self, headers, context, **kwargs):
8286
"""Update headers for the BOM export."""
@@ -149,17 +153,23 @@ def prefetch_queryset(self, queryset):
149153
queryset = queryset.prefetch_related('substitutes')
150154

151155
if self.export_supplier_data:
152-
queryset = queryset.prefetch_related('sub_part__supplier_parts')
153156
queryset = queryset.prefetch_related(
154-
'sub_part__supplier_parts__manufacturer_part'
157+
'sub_part__supplier_parts',
158+
'sub_part__supplier_parts__supplier',
159+
'sub_part__supplier_parts__manufacturer_part',
160+
'sub_part__supplier_parts__manufacturer_part__manufacturer',
155161
)
156162

157163
if self.export_manufacturer_data:
158-
queryset = queryset.prefetch_related('sub_part__manufacturer_parts')
164+
queryset = queryset.prefetch_related(
165+
'sub_part__manufacturer_parts',
166+
'sub_part__manufacturer_parts__manufacturer',
167+
)
159168

160169
if self.export_parameter_data:
161-
queryset = queryset.prefetch_related('sub_part__parameters_list')
162-
queryset = queryset.prefetch_related('sub_part__parameters_list__template')
170+
queryset = queryset.prefetch_related(
171+
'sub_part__parameters_list', 'sub_part__parameters_list__template'
172+
)
163173

164174
return queryset
165175

@@ -242,6 +252,7 @@ def process_bom_row(
242252
):
243253
sub_items = bom_item.sub_part.get_bom_items()
244254
sub_items = self.prefetch_queryset(sub_items)
255+
sub_items = BomItemSerializer.annotate_queryset(sub_items)
245256

246257
for item in sub_items.all():
247258
self.process_bom_row(

0 commit comments

Comments
 (0)