diff --git a/src/documents/bulk_edit.py b/src/documents/bulk_edit.py index 883884694..bde3b1a8b 100644 --- a/src/documents/bulk_edit.py +++ b/src/documents/bulk_edit.py @@ -421,6 +421,7 @@ def merge( merged_pdf = pikepdf.new() version: str = merged_pdf.pdf_version + handoff_asn: int | None = None # use doc_ids to preserve order for doc_id in doc_ids: doc = qs.get(id=doc_id) @@ -436,6 +437,8 @@ def merge( version = max(version, pdf.pdf_version) merged_pdf.pages.extend(pdf.pages) affected_docs.append(doc.id) + if handoff_asn is None and doc.archive_serial_number is not None: + handoff_asn = doc.archive_serial_number except Exception as e: logger.exception( f"Error merging document {doc.id}, it will not be included in the merge: {e}", @@ -461,6 +464,8 @@ def merge( DocumentMetadataOverrides.from_document(metadata_document) ) overrides.title = metadata_document.title + " (merged)" + if metadata_document.archive_serial_number is not None: + handoff_asn = metadata_document.archive_serial_number else: overrides = DocumentMetadataOverrides() else: @@ -469,6 +474,9 @@ def merge( if user is not None: overrides.owner_id = user.id + if delete_originals and handoff_asn is not None: + overrides.asn = handoff_asn + logger.info("Adding merged document to the task queue.") consume_task = consume_file.s( @@ -492,8 +500,8 @@ def merge( except Exception: restore_archive_serial_numbers(backup) raise - else: - consume_task.delay() + else: + consume_task.delay() return "OK" @@ -665,6 +673,8 @@ def edit_pdf( ) if user is not None: overrides.owner_id = user.id + if delete_original and len(pdf_docs) == 1: + overrides.asn = doc.archive_serial_number for idx, pdf in enumerate(pdf_docs, start=1): filepath: Path = ( Path(tempfile.mkdtemp(dir=settings.SCRATCH_DIR)) diff --git a/src/documents/tests/test_bulk_edit.py b/src/documents/tests/test_bulk_edit.py index 950885b22..717e47fda 100644 --- a/src/documents/tests/test_bulk_edit.py +++ b/src/documents/tests/test_bulk_edit.py @@ -603,6 +603,8 @@ class TestPDFActions(DirectoriesMixin, TestCase): ) self.assertEqual(consume_file_args[1].title, None) self.assertFalse(consume_file_args[1].skip_asn) + # No metadata_document_id, delete_originals False, so ASN should be None + self.assertIsNone(consume_file_args[1].asn) # With metadata_document_id overrides result = bulk_edit.merge(doc_ids, metadata_document_id=metadata_document_id) @@ -656,6 +658,7 @@ class TestPDFActions(DirectoriesMixin, TestCase): ) self.assertEqual(consume_file_args[1].title, None) self.assertFalse(consume_file_args[1].skip_asn) + self.assertEqual(consume_file_args[1].asn, 101) delete_documents_args, _ = mock_delete_documents.call_args self.assertEqual( @@ -739,6 +742,7 @@ class TestPDFActions(DirectoriesMixin, TestCase): consume_file_args, _ = mock_consume_file.call_args self.assertEqual(consume_file_args[1].title, "B (split 2)") self.assertFalse(consume_file_args[1].skip_asn) + self.assertIsNone(consume_file_args[1].asn) self.assertEqual(result, "OK") @@ -994,6 +998,7 @@ class TestPDFActions(DirectoriesMixin, TestCase): mock_chord.assert_called_once() consume_file_args, _ = mock_consume_file.call_args self.assertFalse(consume_file_args[1].skip_asn) + self.assertEqual(consume_file_args[1].asn, 250) self.doc2.refresh_from_db() self.assertIsNone(self.doc2.archive_serial_number)