Commit 68f8e31c authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

rpc.remove_items -> rpc.remove_selection. Added rpc.move_selection

parent fb213aa2
Loading
Loading
Loading
Loading
+60 −1
Original line number Diff line number Diff line
@@ -2832,7 +2832,7 @@ def picture_rotate_crop(

@_log_call
@_rpc_groups(["Resources", "Collections"])
def remove_items(user: User, parent_collection_id: int, selection: dict = None) -> bool:
def remove_selection(user: User, parent_collection_id: int, selection: dict) -> bool:
    """
    Will mass remove items based on parent collection

@@ -2881,3 +2881,62 @@ def remove_items(user: User, parent_collection_id: int, selection: dict = None)
                user, resource_instance.id, parent_collection.id
            )
    return True


@_log_call
@_rpc_groups(["Resources", "Collections"])
def move_selection(
    user: User, from_collection_id: int, selection: dict, to_collection_id: int
) -> Dict[str, Dict]:
    """
    Will mass move items based on parent collection and destination collection

    Use such an object for exclusion:

    ```
    {
        "exclude": {
            "resources_ids": [12, 10, 15]
            "collections_ids:" [4, 254, 17]
        }
    }
    ```
    """
    if not selection:
        selection = {}
    if not from_collection_id:
        raise ServiceException(NO_SUCH_COLLECTION)
    parent_collection = Collection.objects.filter(pk=from_collection_id).first()
    if not parent_collection:
        raise ServiceException(NO_SUCH_COLLECTION)
    if not to_collection_id:
        raise ServiceException(NO_SUCH_COLLECTION)
    recipient_collection = Collection.objects.filter(pk=to_collection_id).first()
    if not recipient_collection:
        raise ServiceException(NO_SUCH_COLLECTION)

    children_collections_set = parent_collection.children()
    if selection.get("exclude"):
        if selection["exclude"].get("collections_ids"):
            children_collections_set = children_collections_set.exclude(
                id__in=selection["exclude"].get("collections_ids")
            )
    collections_ids = []
    for collection_instance in children_collections_set.all():
        collections_ids.append(collection_instance.id)

    res_set = parent_collection.resources.all()
    if selection.get("exclude"):
        if selection["exclude"].get("resources_ids"):
            res_set = res_set.exclude(id__in=selection["exclude"].get("resources_ids"))
    resources_ids = []
    for resource_instance in res_set.all():
        resources_ids.append(resource_instance.id)

    return move_items(
        user,
        parent_collection.id,
        recipient_collection.id,
        collections_ids,
        resources_ids,
    )