Fix: workflow assignment of customfield fails if field exists in v2.3.1 (#5302)

This commit is contained in:
shamoon 2024-01-07 14:27:57 -08:00 committed by GitHub
parent 9f6613fe05
commit c64667d396
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 4 deletions

View File

@ -610,10 +610,18 @@ def run_workflow(
if action.assign_custom_fields is not None: if action.assign_custom_fields is not None:
for field in action.assign_custom_fields.all(): for field in action.assign_custom_fields.all():
CustomFieldInstance.objects.create( if (
field=field, CustomFieldInstance.objects.filter(
document=document, field=field,
) # adds to document document=document,
).count()
== 0
):
# can be triggered on existing docs, so only add the field if it doesnt already exist
CustomFieldInstance.objects.create(
field=field,
document=document,
)
document.save() document.save()

View File

@ -13,6 +13,7 @@ from documents.data_models import DocumentSource
from documents.matching import document_matches_workflow from documents.matching import document_matches_workflow
from documents.models import Correspondent from documents.models import Correspondent
from documents.models import CustomField from documents.models import CustomField
from documents.models import CustomFieldInstance
from documents.models import Document from documents.models import Document
from documents.models import DocumentType from documents.models import DocumentType
from documents.models import MatchingModel from documents.models import MatchingModel
@ -997,6 +998,47 @@ class TestWorkflows(DirectoriesMixin, FileSystemAssertsMixin, APITestCase):
self.assertEqual(doc.custom_fields.all().count(), 1) self.assertEqual(doc.custom_fields.all().count(), 1)
def test_document_updated_workflow_existing_custom_field(self):
"""
GIVEN:
- Existing workflow with UPDATED trigger and action that adds a custom field
WHEN:
- Document is updated that already contains the field
THEN:
- Document update succeeds without trying to re-create the field
"""
trigger = WorkflowTrigger.objects.create(
type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED,
filter_has_document_type=self.dt,
)
action = WorkflowAction.objects.create()
action.assign_custom_fields.add(self.cf1)
w = Workflow.objects.create(
name="Workflow 1",
order=0,
)
w.triggers.add(trigger)
w.actions.add(action)
w.save()
doc = Document.objects.create(
title="sample test",
correspondent=self.c,
original_filename="sample.pdf",
)
CustomFieldInstance.objects.create(document=doc, field=self.cf1)
superuser = User.objects.create_superuser("superuser")
self.client.force_authenticate(user=superuser)
self.client.patch(
f"/api/documents/{doc.id}/",
{"document_type": self.dt.id},
format="json",
)
self.assertEqual(doc.custom_fields.all().count(), 1)
def test_workflow_enabled_disabled(self): def test_workflow_enabled_disabled(self):
trigger = WorkflowTrigger.objects.create( trigger = WorkflowTrigger.objects.create(
type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_ADDED, type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_ADDED,