forked from erp-dev/erp
40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""
|
||
Shipment 模块业务逻辑层
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from django.db.models import QuerySet
|
||
|
||
from shipment.models import SalesItem
|
||
|
||
|
||
def get_sales_items_by_printing_order(
|
||
printing_order_id: int,
|
||
include_already_has_shipment: bool = False,
|
||
) -> QuerySet[SalesItem]:
|
||
"""
|
||
通过生产订单ID查询对应的销售品
|
||
|
||
Args:
|
||
printing_order_id: 生产订单ID
|
||
include_already_has_shipment: 是否包含已关联出货单的销售品,默认为 False
|
||
|
||
Returns:
|
||
SalesItem 查询集
|
||
"""
|
||
from printing.models import PrintingJob
|
||
|
||
# 1. 获取该生产订单下所有 PrintingJob 的 ID
|
||
job_ids = PrintingJob.objects.filter(
|
||
printing_order_id=printing_order_id
|
||
).values_list('id', flat=True)
|
||
|
||
# 2. 查询 SalesItem,过滤 printing_job_id 在这些 job_ids 中
|
||
queryset = SalesItem.objects.filter(printing_job_id__in=list(job_ids))
|
||
|
||
# 3. 根据参数决定是否过滤已出货的销售品
|
||
if not include_already_has_shipment:
|
||
queryset = queryset.filter(shipment__isnull=True)
|
||
|
||
return queryset.select_related('shipment').order_by('id')
|