mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-07-28 18:24:38 -05:00
Support bulk edit owner
This commit is contained in:
@@ -8,6 +8,7 @@ from documents.models import StoragePath
|
||||
from documents.permissions import set_permissions_for_object
|
||||
from documents.tasks import bulk_update_documents
|
||||
from documents.tasks import update_document_archive_file
|
||||
from documents.tasks import update_owner_for_object
|
||||
|
||||
|
||||
def set_correspondent(doc_ids, correspondent):
|
||||
@@ -131,11 +132,17 @@ def redo_ocr(doc_ids):
|
||||
return "OK"
|
||||
|
||||
|
||||
def set_permissions(doc_ids, permissions):
|
||||
def set_permissions(doc_ids, set_permissions, owner=None):
|
||||
|
||||
qs = Document.objects.filter(id__in=doc_ids)
|
||||
|
||||
if owner is not None:
|
||||
update_owner_for_object.delay(document_ids=doc_ids, owner=owner)
|
||||
|
||||
for doc in qs:
|
||||
set_permissions_for_object(permissions, doc)
|
||||
if set_permissions is not None:
|
||||
set_permissions_for_object(set_permissions, doc)
|
||||
|
||||
affected_docs = [doc.id for doc in qs]
|
||||
|
||||
bulk_update_documents.delay(document_ids=affected_docs)
|
||||
|
@@ -591,10 +591,18 @@ class BulkEditSerializer(DocumentListSerializer, SetPermissionsMixin):
|
||||
else:
|
||||
raise serializers.ValidationError("remove_tags not specified")
|
||||
|
||||
def _validate_owner(self, owner):
|
||||
ownerUser = User.objects.get(pk=owner)
|
||||
if ownerUser is None:
|
||||
raise serializers.ValidationError("Specified owner cannot be found")
|
||||
return ownerUser
|
||||
|
||||
def _validate_parameters_set_permissions(self, parameters):
|
||||
if "permissions" in parameters:
|
||||
self.validate_set_permissions(parameters["permissions"])
|
||||
else:
|
||||
if "owner" in parameters:
|
||||
self._validate_owner(parameters["owner"])
|
||||
if "permissions" not in parameters and "owner" not in parameters:
|
||||
raise serializers.ValidationError("permissions not specified")
|
||||
|
||||
def validate(self, attrs):
|
||||
|
@@ -12,6 +12,7 @@ from asgiref.sync import async_to_sync
|
||||
from celery import shared_task
|
||||
from channels.layers import get_channel_layer
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import transaction
|
||||
from django.db.models.signals import post_save
|
||||
from documents import barcodes
|
||||
@@ -284,3 +285,12 @@ def update_document_archive_file(document_id):
|
||||
)
|
||||
finally:
|
||||
parser.cleanup()
|
||||
|
||||
|
||||
@shared_task
|
||||
def update_owner_for_object(document_ids, owner):
|
||||
documents = Document.objects.filter(id__in=document_ids)
|
||||
ownerUser = User.objects.get(pk=owner)
|
||||
for document in documents:
|
||||
document.owner = ownerUser
|
||||
document.save()
|
||||
|
@@ -2347,7 +2347,7 @@ class TestBulkEdit(DirectoriesMixin, APITestCase):
|
||||
|
||||
bulk_edit.set_permissions(
|
||||
[self.doc2.id, self.doc3.id],
|
||||
permissions=permissions,
|
||||
set_permissions=permissions,
|
||||
)
|
||||
|
||||
self.assertEqual(get_users_with_perms(self.doc2).count(), 2)
|
||||
|
Reference in New Issue
Block a user