mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-04-02 13:45:10 -05:00
96 lines
2.5 KiB
Python
96 lines
2.5 KiB
Python
import itertools
|
|
|
|
from django.db.models import Q
|
|
from django_q.tasks import async_task
|
|
|
|
from documents.models import Document, Correspondent, DocumentType
|
|
|
|
|
|
def set_correspondent(doc_ids, correspondent):
|
|
if correspondent:
|
|
correspondent = Correspondent.objects.get(id=correspondent)
|
|
|
|
qs = Document.objects.filter(
|
|
Q(id__in=doc_ids) & ~Q(correspondent=correspondent))
|
|
affected_docs = [doc.id for doc in qs]
|
|
qs.update(correspondent=correspondent)
|
|
|
|
async_task("documents.tasks.bulk_rename_files", document_ids=affected_docs)
|
|
|
|
return "OK"
|
|
|
|
|
|
def set_document_type(doc_ids, document_type):
|
|
if document_type:
|
|
document_type = DocumentType.objects.get(id=document_type)
|
|
|
|
qs = Document.objects.filter(
|
|
Q(id__in=doc_ids) & ~Q(document_type=document_type))
|
|
affected_docs = [doc.id for doc in qs]
|
|
qs.update(document_type=document_type)
|
|
|
|
async_task("documents.tasks.bulk_rename_files", document_ids=affected_docs)
|
|
|
|
return "OK"
|
|
|
|
|
|
def add_tag(doc_ids, tag):
|
|
|
|
qs = Document.objects.filter(Q(id__in=doc_ids) & ~Q(tags__id=tag))
|
|
affected_docs = [doc.id for doc in qs]
|
|
|
|
DocumentTagRelationship = Document.tags.through
|
|
|
|
DocumentTagRelationship.objects.bulk_create([
|
|
DocumentTagRelationship(
|
|
document_id=doc, tag_id=tag) for doc in affected_docs
|
|
])
|
|
|
|
async_task("documents.tasks.bulk_rename_files", document_ids=affected_docs)
|
|
|
|
return "OK"
|
|
|
|
|
|
def remove_tag(doc_ids, tag):
|
|
|
|
qs = Document.objects.filter(Q(id__in=doc_ids) & Q(tags__id=tag))
|
|
affected_docs = [doc.id for doc in qs]
|
|
|
|
DocumentTagRelationship = Document.tags.through
|
|
|
|
DocumentTagRelationship.objects.filter(
|
|
Q(document_id__in=affected_docs) &
|
|
Q(tag_id=tag)
|
|
).delete()
|
|
|
|
async_task("documents.tasks.bulk_rename_files", document_ids=affected_docs)
|
|
|
|
return "OK"
|
|
|
|
|
|
def modify_tags(doc_ids, add_tags, remove_tags):
|
|
qs = Document.objects.filter(id__in=doc_ids)
|
|
affected_docs = [doc.id for doc in qs]
|
|
|
|
DocumentTagRelationship = Document.tags.through
|
|
|
|
DocumentTagRelationship.objects.filter(
|
|
document_id__in=affected_docs,
|
|
tag_id__in=remove_tags,
|
|
).delete()
|
|
|
|
DocumentTagRelationship.objects.bulk_create([
|
|
DocumentTagRelationship(
|
|
document_id=doc, tag_id=tag) for (doc,tag) in itertools.product(affected_docs, add_tags)
|
|
], ignore_conflicts=True)
|
|
|
|
async_task("documents.tasks.bulk_rename_files", document_ids=affected_docs)
|
|
|
|
return "OK"
|
|
|
|
|
|
def delete(doc_ids):
|
|
Document.objects.filter(id__in=doc_ids).delete()
|
|
|
|
return "OK"
|