mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Fix: workflow assignment of customfield fails if field exists in v2.3.1 (#5302)
This commit is contained in:
		| @@ -610,10 +610,18 @@ def run_workflow( | ||||
|  | ||||
|                 if action.assign_custom_fields is not None: | ||||
|                     for field in action.assign_custom_fields.all(): | ||||
|                         CustomFieldInstance.objects.create( | ||||
|                             field=field, | ||||
|                             document=document, | ||||
|                         )  # adds to document | ||||
|                         if ( | ||||
|                             CustomFieldInstance.objects.filter( | ||||
|                                 field=field, | ||||
|                                 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() | ||||
|  | ||||
|   | ||||
| @@ -13,6 +13,7 @@ from documents.data_models import DocumentSource | ||||
| from documents.matching import document_matches_workflow | ||||
| from documents.models import Correspondent | ||||
| from documents.models import CustomField | ||||
| from documents.models import CustomFieldInstance | ||||
| from documents.models import Document | ||||
| from documents.models import DocumentType | ||||
| from documents.models import MatchingModel | ||||
| @@ -997,6 +998,47 @@ class TestWorkflows(DirectoriesMixin, FileSystemAssertsMixin, APITestCase): | ||||
|  | ||||
|         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): | ||||
|         trigger = WorkflowTrigger.objects.create( | ||||
|             type=WorkflowTrigger.WorkflowTriggerType.DOCUMENT_ADDED, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shamoon
					shamoon