diff --git a/src/documents/views.py b/src/documents/views.py index a6bb6c955..36e8e152b 100644 --- a/src/documents/views.py +++ b/src/documents/views.py @@ -196,6 +196,7 @@ from documents.serialisers import DocumentVersionLabelSerializer from documents.serialisers import DocumentVersionSerializer from documents.serialisers import EditPdfDocumentsSerializer from documents.serialisers import EmailSerializer +from documents.serialisers import MergeDocumentsAsVersionsSerializer from documents.serialisers import MergeDocumentsSerializer from documents.serialisers import NotesSerializer from documents.serialisers import PostDocumentSerializer @@ -2809,6 +2810,7 @@ class DocumentOperationPermissionMixin(PassUserMixin, DocumentSelectionMixin): bulk_edit.rotate, bulk_edit.delete_pages, bulk_edit.edit_pdf, + bulk_edit.merge_as_versions, bulk_edit.remove_password, ] ) @@ -3095,6 +3097,33 @@ class MergeDocumentsView(DocumentOperationPermissionMixin): ) +@extend_schema_view( + post=extend_schema( + operation_id="documents_merge_as_versions", + description="Merge selected documents as versions of a chosen root document", + responses={ + 200: inline_serializer( + name="MergeDocumentsAsVersionsResult", + fields={ + "result": serializers.CharField(), + }, + ), + }, + ), +) +class MergeDocumentsAsVersionsView(DocumentOperationPermissionMixin): + serializer_class = MergeDocumentsAsVersionsSerializer + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + return self._execute_document_action( + method=bulk_edit.merge_as_versions, + validated_data=serializer.validated_data, + operation_label="document merge as versions", + ) + + @extend_schema_view( post=extend_schema( operation_id="documents_delete", diff --git a/src/paperless/urls.py b/src/paperless/urls.py index d20df98e8..a6e0ba6c7 100644 --- a/src/paperless/urls.py +++ b/src/paperless/urls.py @@ -27,6 +27,7 @@ from documents.views import EditPdfDocumentsView from documents.views import GlobalSearchView from documents.views import IndexView from documents.views import LogViewSet +from documents.views import MergeDocumentsAsVersionsView from documents.views import MergeDocumentsView from documents.views import PostDocumentView from documents.views import RemoteVersionView @@ -172,6 +173,11 @@ urlpatterns = [ MergeDocumentsView.as_view(), name="merge_documents", ), + re_path( + "^merge_as_versions/", + MergeDocumentsAsVersionsView.as_view(), + name="merge_documents_as_versions", + ), re_path( "^edit_pdf/", EditPdfDocumentsView.as_view(),