mirror of
				https://github.com/inventree/InvenTree.git
				synced 2025-10-31 05:05:42 +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 | ||||
|  | ||||
| import common.settings | ||||
| import InvenTree.exceptions | ||||
| import InvenTree.fields | ||||
| import InvenTree.format | ||||
| import InvenTree.helpers | ||||
| @@ -590,6 +591,9 @@ class InvenTreeTree(MetadataMixin, PluginValidationMixin, MPTTModel): | ||||
|             try: | ||||
|                 self.__class__.objects.partial_rebuild(tree_id) | ||||
|             except Exception: | ||||
|                 InvenTree.exceptions.log_error( | ||||
|                     f'{self.__class__.__name__}.partial_rebuild' | ||||
|                 ) | ||||
|                 logger.warning( | ||||
|                     'Failed to rebuild tree for %s <%s>', | ||||
|                     self.__class__.__name__, | ||||
|   | ||||
| @@ -571,8 +571,10 @@ class StockItem( | ||||
|         for key in ['parent_id', 'part_id', 'build_id']: | ||||
|             data.pop(key, None) | ||||
|  | ||||
|         tree_id = kwargs.pop('tree_id', 0) | ||||
|  | ||||
|         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['rght'] = kwargs.pop('rght', 0) | ||||
|         data['lft'] = kwargs.pop('lft', 0) | ||||
| @@ -589,6 +591,11 @@ class StockItem( | ||||
|         # Create the StockItem objects in bulk | ||||
|         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 StockItem.objects.filter(part=part, serial__in=serials) | ||||
|  | ||||
| @@ -1810,11 +1817,6 @@ class StockItem( | ||||
|         # Remove the equivalent number of items | ||||
|         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 | ||||
|  | ||||
|     @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. | ||||
|     """ | ||||
|     from InvenTree.exceptions import log_error | ||||
|     from stock.models import StockItem | ||||
|  | ||||
|     if tree_id: | ||||
|         try: | ||||
|             StockItem.objects.partial_rebuild(tree_id) | ||||
|         except Exception: | ||||
|             log_error('rebuild_stock_item_tree') | ||||
|             logger.warning('Failed to rebuild StockItem tree') | ||||
|             # If the partial rebuild fails, rebuild the entire tree | ||||
|             StockItem.objects.rebuild() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user