mirror of
https://github.com/inventree/InvenTree.git
synced 2025-07-05 13:10:57 +00:00
Log errors during tree rebuild (#9927)
* Log errors during tree rebuild * Ensure stock tree is rebuilt * Update models.py Fix call to rebuild_stock_tree * Update models.py style fixes
This commit is contained in:
@ -21,6 +21,7 @@ from mptt.exceptions import InvalidMove
|
|||||||
from mptt.models import MPTTModel, TreeForeignKey
|
from mptt.models import MPTTModel, TreeForeignKey
|
||||||
|
|
||||||
import common.settings
|
import common.settings
|
||||||
|
import InvenTree.exceptions
|
||||||
import InvenTree.fields
|
import InvenTree.fields
|
||||||
import InvenTree.format
|
import InvenTree.format
|
||||||
import InvenTree.helpers
|
import InvenTree.helpers
|
||||||
@ -590,6 +591,9 @@ class InvenTreeTree(MetadataMixin, PluginValidationMixin, MPTTModel):
|
|||||||
try:
|
try:
|
||||||
self.__class__.objects.partial_rebuild(tree_id)
|
self.__class__.objects.partial_rebuild(tree_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
InvenTree.exceptions.log_error(
|
||||||
|
f'{self.__class__.__name__}.partial_rebuild'
|
||||||
|
)
|
||||||
logger.warning(
|
logger.warning(
|
||||||
'Failed to rebuild tree for %s <%s>',
|
'Failed to rebuild tree for %s <%s>',
|
||||||
self.__class__.__name__,
|
self.__class__.__name__,
|
||||||
|
@ -571,8 +571,10 @@ class StockItem(
|
|||||||
for key in ['parent_id', 'part_id', 'build_id']:
|
for key in ['parent_id', 'part_id', 'build_id']:
|
||||||
data.pop(key, None)
|
data.pop(key, None)
|
||||||
|
|
||||||
|
tree_id = kwargs.pop('tree_id', 0)
|
||||||
|
|
||||||
data['parent'] = kwargs.pop('parent', None)
|
data['parent'] = kwargs.pop('parent', None)
|
||||||
data['tree_id'] = kwargs.pop('tree_id', 0)
|
data['tree_id'] = tree_id
|
||||||
data['level'] = kwargs.pop('level', 0)
|
data['level'] = kwargs.pop('level', 0)
|
||||||
data['rght'] = kwargs.pop('rght', 0)
|
data['rght'] = kwargs.pop('rght', 0)
|
||||||
data['lft'] = kwargs.pop('lft', 0)
|
data['lft'] = kwargs.pop('lft', 0)
|
||||||
@ -589,6 +591,11 @@ class StockItem(
|
|||||||
# Create the StockItem objects in bulk
|
# Create the StockItem objects in bulk
|
||||||
StockItem.objects.bulk_create(items)
|
StockItem.objects.bulk_create(items)
|
||||||
|
|
||||||
|
# We will need to rebuild the stock item tree manually, due to the bulk_create operation
|
||||||
|
InvenTree.tasks.offload_task(
|
||||||
|
stock.tasks.rebuild_stock_item_tree, tree_id=tree_id, group='stock'
|
||||||
|
)
|
||||||
|
|
||||||
# Return the newly created StockItem objects
|
# Return the newly created StockItem objects
|
||||||
return StockItem.objects.filter(part=part, serial__in=serials)
|
return StockItem.objects.filter(part=part, serial__in=serials)
|
||||||
|
|
||||||
@ -1810,11 +1817,6 @@ class StockItem(
|
|||||||
# Remove the equivalent number of items
|
# Remove the equivalent number of items
|
||||||
self.take_stock(quantity, user, notes=notes)
|
self.take_stock(quantity, user, notes=notes)
|
||||||
|
|
||||||
# Rebuild the stock tree
|
|
||||||
InvenTree.tasks.offload_task(
|
|
||||||
stock.tasks.rebuild_stock_item_tree, tree_id=self.tree_id, group='stock'
|
|
||||||
)
|
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
|
@ -13,12 +13,14 @@ def rebuild_stock_item_tree(tree_id=None):
|
|||||||
|
|
||||||
The StockItem tree uses the MPTT library to manage the tree structure.
|
The StockItem tree uses the MPTT library to manage the tree structure.
|
||||||
"""
|
"""
|
||||||
|
from InvenTree.exceptions import log_error
|
||||||
from stock.models import StockItem
|
from stock.models import StockItem
|
||||||
|
|
||||||
if tree_id:
|
if tree_id:
|
||||||
try:
|
try:
|
||||||
StockItem.objects.partial_rebuild(tree_id)
|
StockItem.objects.partial_rebuild(tree_id)
|
||||||
except Exception:
|
except Exception:
|
||||||
|
log_error('rebuild_stock_item_tree')
|
||||||
logger.warning('Failed to rebuild StockItem tree')
|
logger.warning('Failed to rebuild StockItem tree')
|
||||||
# If the partial rebuild fails, rebuild the entire tree
|
# If the partial rebuild fails, rebuild the entire tree
|
||||||
StockItem.objects.rebuild()
|
StockItem.objects.rebuild()
|
||||||
|
Reference in New Issue
Block a user