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:
@ -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
|
||||
)
|
||||
|
||||
|
Reference in New Issue
Block a user