from django.db.models import Q

from shop_management.models.data.sale import Sale


def reportable_sale_filter(prefix=""):
    """Include legacy sales and posted inventory-engine invoices in reports."""
    field = lambda name: f"{prefix}{name}"
    return Q(**{field("uses_inventory_engine"): False}) | Q(
        **{field("document_status"): Sale.DocumentStatus.POSTED}
    )


def reportable_sales(queryset):
    return queryset.filter(reportable_sale_filter())
