Merge pull request #2285 from SchrodingersGat/bom-quantity

Normalize "available stock" quantity before exporting
This commit is contained in:
Oliver 2021-11-10 13:44:43 +11:00 committed by GitHub
commit 5e8aab9137
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -7,7 +7,7 @@ from collections import OrderedDict
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from InvenTree.helpers import DownloadFile, GetExportFormats from InvenTree.helpers import DownloadFile, GetExportFormats, normalize
from .admin import BomItemResource from .admin import BomItemResource
from .models import BomItem from .models import BomItem
@ -59,7 +59,7 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa
uids = [] uids = []
def add_items(items, level): def add_items(items, level, cascade):
# Add items at a given layer # Add items at a given layer
for item in items: for item in items:
@ -71,21 +71,13 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa
bom_items.append(item) bom_items.append(item)
if item.sub_part.assembly: if cascade and item.sub_part.assembly:
if max_levels is None or level < max_levels: if max_levels is None or level < max_levels:
add_items(item.sub_part.bom_items.all().order_by('id'), level + 1) add_items(item.sub_part.bom_items.all().order_by('id'), level + 1)
if cascade: top_level_items = part.get_bom_items().order_by('id')
# Cascading (multi-level) BOM
# Start with the top level add_items(top_level_items, 1, cascade)
items_to_process = part.bom_items.all().order_by('id')
add_items(items_to_process, 1)
else:
# No cascading needed - just the top-level items
bom_items = [item for item in part.bom_items.all().order_by('id')]
dataset = BomItemResource().export(queryset=bom_items, cascade=cascade) dataset = BomItemResource().export(queryset=bom_items, cascade=cascade)
@ -148,8 +140,9 @@ def ExportBom(part, fmt='csv', cascade=False, max_levels=None, parameter_data=Fa
stock_data.append('') stock_data.append('')
except AttributeError: except AttributeError:
stock_data.append('') stock_data.append('')
# Get part current stock # Get part current stock
stock_data.append(str(bom_item.sub_part.available_stock)) stock_data.append(str(normalize(bom_item.sub_part.available_stock)))
for s_idx, header in enumerate(stock_headers): for s_idx, header in enumerate(stock_headers):
try: try: