2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-07-01 03:00:54 +00:00

Tweaks to fix circular imports (#9888)

This commit is contained in:
Oliver
2025-06-27 17:10:06 +10:00
committed by GitHub
parent aa4927ddb6
commit 486838b7e7

View File

@ -11,13 +11,11 @@ import structlog
from allauth.account.models import EmailAddress
from opentelemetry import trace
import build.models as build_models
import common.notifications
import InvenTree.helpers
import InvenTree.helpers_email
import InvenTree.helpers_model
import InvenTree.tasks
import part.models as part_models
from build.events import BuildEvents
from build.status_codes import BuildStatusGroups
from InvenTree.ready import isImportingData
@ -30,7 +28,9 @@ logger = structlog.get_logger('inventree')
@tracer.start_as_current_span('auto_allocate_build')
def auto_allocate_build(build_id: int, **kwargs):
"""Run auto-allocation for a specified BuildOrder."""
build_order = build_models.Build.objects.filter(pk=build_id).first()
from build.models import Build
build_order = Build.objects.filter(pk=build_id).first()
if not build_order:
logger.warning(
@ -45,7 +45,9 @@ def auto_allocate_build(build_id: int, **kwargs):
@tracer.start_as_current_span('complete_build_allocations')
def complete_build_allocations(build_id: int, user_id: int):
"""Complete build allocations for a specified BuildOrder."""
build_order = build_models.Build.objects.filter(pk=build_id).first()
from build.models import Build
build_order = Build.objects.filter(pk=build_id).first()
if user_id:
try:
@ -75,9 +77,12 @@ def update_build_order_lines(bom_item_pk: int):
This task is triggered when a BomItem is created or updated.
"""
from build.models import Build, BuildLine
from part.models import BomItem
logger.info('Updating build order lines for BomItem %s', bom_item_pk)
bom_item = part_models.BomItem.objects.filter(pk=bom_item_pk).first()
bom_item = BomItem.objects.filter(pk=bom_item_pk).first()
# If the BomItem has been deleted, there is nothing to do
if not bom_item:
@ -86,16 +91,14 @@ def update_build_order_lines(bom_item_pk: int):
assemblies = bom_item.get_assemblies()
# Find all active builds which reference any of the parts
builds = build_models.Build.objects.filter(
builds = Build.objects.filter(
part__in=list(assemblies), status__in=BuildStatusGroups.ACTIVE_CODES
)
# Iterate through each build, and update the relevant line items
for bo in builds:
# Try to find a matching build order line
line = build_models.BuildLine.objects.filter(
build=bo, bom_item=bom_item
).first()
line = BuildLine.objects.filter(build=bo, bom_item=bom_item).first()
q = bom_item.get_required_quantity(bo.quantity)
@ -106,9 +109,7 @@ def update_build_order_lines(bom_item_pk: int):
line.save()
else:
# Create a new line item
build_models.BuildLine.objects.create(
build=bo, bom_item=bom_item, quantity=q
)
BuildLine.objects.create(build=bo, bom_item=bom_item, quantity=q)
if builds.count() > 0:
logger.info(
@ -117,11 +118,13 @@ def update_build_order_lines(bom_item_pk: int):
@tracer.start_as_current_span('check_build_stock')
def check_build_stock(build: build_models.Build):
def check_build_stock(build):
"""Check the required stock for a newly created build order.
Send an email out to any subscribed users if stock is low.
"""
from part.models import Part
# Do not notify if we are importing data
if isImportingData():
return
@ -136,7 +139,7 @@ def check_build_stock(build: build_models.Build):
try:
part = build.part
except part_models.Part.DoesNotExist:
except Part.DoesNotExist:
# Note: This error may be thrown during unit testing...
logger.exception("Invalid build.part passed to 'build.tasks.check_build_stock'")
return
@ -203,7 +206,7 @@ def check_build_stock(build: build_models.Build):
@tracer.start_as_current_span('notify_overdue_build_order')
def notify_overdue_build_order(bo: build_models.Build):
def notify_overdue_build_order(bo):
"""Notify appropriate users that a Build has just become 'overdue'."""
targets = []
@ -245,9 +248,11 @@ def check_overdue_build_orders():
- Look at the 'target_date' of any outstanding BuildOrder objects
- If the 'target_date' expired *yesterday* then the order is just out of date
"""
from build.models import Build
yesterday = InvenTree.helpers.current_date() - timedelta(days=1)
overdue_orders = build_models.Build.objects.filter(
overdue_orders = Build.objects.filter(
target_date=yesterday, status__in=BuildStatusGroups.ACTIVE_CODES
)