Support bulk edit owner

This commit is contained in:
Michael Shamoon
2022-12-09 17:51:01 -08:00
parent a5ab6f2558
commit 6dc5c1de32
10 changed files with 47 additions and 37 deletions

View File

@@ -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)

View File

@@ -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):

View File

@@ -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()

View File

@@ -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)