2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-05-04 22:38:49 +00:00
Matthias Mair faac6b6bf5
refactor: remove blank lines after docstring (#5736)
There shouldn't be any blank lines after the function docstring.
Remove the blank lines to fix this issue.

Co-authored-by: deepsource-autofix[bot] <62050782+deepsource-autofix[bot]@users.noreply.github.com>
2023-10-18 07:28:57 +11:00

36 lines
1.1 KiB
Python

"""Custom query filters for the Stock models"""
from django.db.models import F, Func, IntegerField, OuterRef, Q, Subquery
from django.db.models.functions import Coalesce
import stock.models
def annotate_location_items(filter: Q = None):
"""Construct a queryset annotation which returns the number of stock items in a particular location.
- Includes items in subcategories also
- Requires subquery to perform annotation
"""
# Construct a subquery to provide all items in this location and any sublocations
subquery = stock.models.StockItem.objects.exclude(location=None).filter(
location__tree_id=OuterRef('tree_id'),
location__lft__gte=OuterRef('lft'),
location__rght__lte=OuterRef('rght'),
location__level__gte=OuterRef('level'),
)
# Optionally apply extra filter to returned results
if filter is not None:
subquery = subquery.filter(filter)
return Coalesce(
Subquery(
subquery.annotate(
total=Func(F('pk'), function='COUNT', output_field=IntegerField())
).values('total')
),
0,
output_field=IntegerField()
)