]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Enhancement: support doc_id placeholder in workflow templates (#11847)
authorshamoon <4887959+shamoon@users.noreply.github.com>
Thu, 22 Jan 2026 00:05:19 +0000 (16:05 -0800)
committerGitHub <noreply@github.com>
Thu, 22 Jan 2026 00:05:19 +0000 (00:05 +0000)
docs/usage.md
src/documents/templating/workflows.py
src/documents/tests/test_workflows.py
src/documents/workflows/actions.py
src/documents/workflows/mutations.py

index cac07f4a5f745664c8d094e1279f2b52df06edbe..7da83a3e1c3e035c3242692405cffb13ed77dd1e 100644 (file)
@@ -597,6 +597,7 @@ The following placeholders are only available for "added" or "updated" triggers
 -   `{{created_day}}`: created day
 -   `{{created_time}}`: created time in HH:MM format
 -   `{{doc_url}}`: URL to the document in the web UI. Requires the `PAPERLESS_URL` setting to be set.
+-   `{{doc_id}}`: Document ID
 
 ##### Examples
 
index 67f3ac930d214167d0200a667e03933d36e6d17d..66fd97e01739e169a07aea9eecad62ae6e967286 100644 (file)
@@ -40,6 +40,7 @@ def parse_w_workflow_placeholders(
     created: date | None = None,
     doc_title: str | None = None,
     doc_url: str | None = None,
+    doc_id: int | None = None,
 ) -> str:
     """
     Available title placeholders for Workflows depend on what has already been assigned,
@@ -79,6 +80,8 @@ def parse_w_workflow_placeholders(
         formatting.update({"doc_title": doc_title})
     if doc_url is not None:
         formatting.update({"doc_url": doc_url})
+    if doc_id is not None:
+        formatting.update({"doc_id": str(doc_id)})
 
     logger.debug(f"Parsing Workflow Jinja template: {text}")
     try:
index deb40a16565dc555dae974f234d794e901aac22b..d2f843a68eb26d75c5d3eba19984559eb1fddbeb 100644 (file)
@@ -3298,7 +3298,7 @@ class TestWorkflows(
         )
         webhook_action = WorkflowActionWebhook.objects.create(
             use_params=False,
-            body="Test message: {{doc_url}}",
+            body="Test message: {{doc_url}} with id {{doc_id}}",
             url="http://paperless-ngx.com",
             include_document=False,
         )
@@ -3328,7 +3328,10 @@ class TestWorkflows(
 
         mock_post.assert_called_once_with(
             url="http://paperless-ngx.com",
-            data=f"Test message: http://localhost:8000/paperless/documents/{doc.id}/",
+            data=(
+                f"Test message: http://localhost:8000/paperless/documents/{doc.id}/"
+                f" with id {doc.id}"
+            ),
             headers={},
             files=None,
             as_json=False,
index 040cbc12731cab99c4a08ddcfc33acbbf3fd53d2..a61b9930e828c0f99b409893956fccd346fa9883 100644 (file)
@@ -44,6 +44,7 @@ def build_workflow_action_context(
             "current_filename": document.filename or "",
             "added": timezone.localtime(document.added),
             "created": document.created,
+            "id": document.pk,
         }
 
     correspondent_obj = (
@@ -75,6 +76,7 @@ def build_workflow_action_context(
         "current_filename": filename,
         "added": timezone.localtime(timezone.now()),
         "created": overrides.created if overrides else None,
+        "id": "",
     }
 
 
@@ -109,6 +111,7 @@ def execute_email_action(
             context["created"],
             context["title"],
             context["doc_url"],
+            context["id"],
         )
         if action.email.subject
         else ""
@@ -125,6 +128,7 @@ def execute_email_action(
             context["created"],
             context["title"],
             context["doc_url"],
+            context["id"],
         )
         if action.email.body
         else ""
@@ -203,6 +207,7 @@ def execute_webhook_action(
                             context["created"],
                             context["title"],
                             context["doc_url"],
+                            context["id"],
                         )
                 except Exception as e:
                     logger.error(
@@ -221,6 +226,7 @@ def execute_webhook_action(
                 context["created"],
                 context["title"],
                 context["doc_url"],
+                context["id"],
             )
         headers = {}
         if action.webhook.headers:
index ef85dba0fdade3e2b61242678f2f8cad15c8d47d..b93a267817791288bdd41671eb9a0578810eeb79 100644 (file)
@@ -55,6 +55,9 @@ def apply_assignment_to_document(
                 document.original_filename or "",
                 document.filename or "",
                 document.created,
+                "",  # dont pass the title to avoid recursion
+                "",  # no urls in titles
+                document.pk,
             )
         except Exception:  # pragma: no cover
             logger.exception(