Commit 5442ee29 authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

fix include/exclude logic in find_items_sets

parent e2430d2b
Loading
Loading
Loading
Loading
+17 −8
Original line number Diff line number Diff line
@@ -2910,6 +2910,8 @@ def _find_items_sets_from_selection_dict(
        }
    }
    ```
    If no include, all items from parent are selected and then excludes are applied.

    """
    if not selection:
        selection = {}
@@ -2918,28 +2920,35 @@ def _find_items_sets_from_selection_dict(
    parent_collection = Collection.objects.filter(pk=from_collection_id).first()
    if not parent_collection:
        raise ServiceException(NO_SUCH_COLLECTION)

    # Par défaut, tout sélectionner depuis la collec parente
    children_collections_set = parent_collection.children()
    resources_set = parent_collection.resources.all()

    if selection.get("include"):
        # Si liste d'inclusion... ne rien sélectionner par défaut
        children_collections_set = Collection.objects.none()
        resources_set = Resource.objects.none()
        if selection["include"].get("collections_ids"):
            children_collections_set = children_collections_set.filter(
            children_collections_set = Collection.objects.filter(
                id__in=selection["include"].get("collections_ids")
            )
        if selection["include"].get("resources_ids"):
            resources_set = Resource.objects.filter(
                id__in=selection["include"].get("resources_ids")
            )

    # Appliquer les exclusions sur les query set précédents
    if selection.get("exclude"):
        if selection["exclude"].get("collections_ids"):
            children_collections_set = children_collections_set.exclude(
                id__in=selection["exclude"].get("collections_ids")
            )
    resources_set = parent_collection.resources.all()
    if selection.get("include"):
        if selection["include"].get("resources_ids"):
            resources_set = resources_set.filter(
                id__in=selection["include"].get("resources_ids")
            )
    if selection.get("exclude"):
        if selection["exclude"].get("resources_ids"):
            resources_set = resources_set.exclude(
                id__in=selection["exclude"].get("resources_ids")
            )

    return resources_set, children_collections_set