diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html index 5f0d63247..5a88e81fb 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.html @@ -38,11 +38,14 @@
-
-
+
+ + + +
diff --git a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts index bea297ef6..6e2391c52 100644 --- a/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/workflow-edit-dialog/workflow-edit-dialog.component.ts @@ -150,6 +150,13 @@ export class WorkflowEditDialogComponent filter_filename: new FormControl(trigger.filter_filename), filter_path: new FormControl(trigger.filter_path), filter_mailrule: new FormControl(trigger.filter_mailrule), + filter_has_tags: new FormControl(trigger.filter_has_tags), + filter_has_correspondent: new FormControl( + trigger.filter_has_correspondent + ), + filter_has_document_type: new FormControl( + trigger.filter_has_document_type + ), }), { emitEvent } ) diff --git a/src-ui/src/app/data/workflow-trigger.ts b/src-ui/src/app/data/workflow-trigger.ts index c8745c4ac..cab3762a9 100644 --- a/src-ui/src/app/data/workflow-trigger.ts +++ b/src-ui/src/app/data/workflow-trigger.ts @@ -22,4 +22,10 @@ export interface WorkflowTrigger extends ObjectWithId { filter_path?: string filter_mailrule?: number // MailRule.id + + filter_has_tags?: number[] // Tag.id[] + + filter_has_correspondent?: number // Correspondent.id + + filter_has_document_type?: number // DocumentType.id } diff --git a/src/documents/matching.py b/src/documents/matching.py index 045e2ba79..34e981797 100644 --- a/src/documents/matching.py +++ b/src/documents/matching.py @@ -311,6 +311,40 @@ def document_matches_workflow( elif trigger_type is WorkflowTrigger.WorkflowTriggerType.DOCUMENT_ADDED: # document is type Document + # Document has_tags vs document tags + if ( + trigger.filter_has_tags.all().count() > 0 + and document.tags.filter( + id__in=trigger.filter_has_tags.all().values_list("id"), + ).count() + == 0 + ): + log_match_failure( + f"Document tags {document.tags} do not include" + f" {trigger.filter_has_tags}", + ) + trigger_matched = False + + # Document has_correspondent vs document correpondent + if ( + trigger.filter_has_correspondent is not None + and document.correspondent != trigger.filter_has_correspondent + ): + log_match_failure( + f"Document correspondent {document.correspondent} does not match {trigger.filter_has_correspondent}", + ) + trigger_matched = False + + # Document has_correspondent vs document correpondent + if ( + trigger.filter_has_document_type is not None + and document.document_type != trigger.filter_has_document_type + ): + log_match_failure( + f"Document doc type {document.document_type} does not match {trigger.filter_has_document_type}", + ) + trigger_matched = False + # Document filename vs template filename if ( trigger.filter_filename is not None diff --git a/src/documents/migrations/1044_workflow_workflowaction_workflowtrigger_and_more.py b/src/documents/migrations/1044_workflow_workflowaction_workflowtrigger_and_more.py index 8013bf5f1..c7106511a 100644 --- a/src/documents/migrations/1044_workflow_workflowaction_workflowtrigger_and_more.py +++ b/src/documents/migrations/1044_workflow_workflowaction_workflowtrigger_and_more.py @@ -395,6 +395,34 @@ class Migration(migrations.Migration): verbose_name="filter documents from this mail rule", ), ), + ( + "filter_has_tags", + models.ManyToManyField( + blank=True, + to="documents.tag", + verbose_name="has these tag(s)", + ), + ), + ( + "filter_has_correspondent", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="documents.documenttype", + verbose_name="has this document type", + ), + ), + ( + "filter_has_document_type", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="documents.correspondent", + verbose_name="has this correspondent", + ), + ), ], options={ "verbose_name": "workflow trigger", diff --git a/src/documents/models.py b/src/documents/models.py index 972de8bca..5fab886d8 100644 --- a/src/documents/models.py +++ b/src/documents/models.py @@ -943,6 +943,28 @@ class WorkflowTrigger(models.Model): verbose_name=_("filter documents from this mail rule"), ) + filter_has_tags = models.ManyToManyField( + Tag, + blank=True, + verbose_name=_("has these tag(s)"), + ) + + filter_has_correspondent = models.ForeignKey( + DocumentType, + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("has this document type"), + ) + + filter_has_document_type = models.ForeignKey( + Correspondent, + null=True, + blank=True, + on_delete=models.SET_NULL, + verbose_name=_("has this correspondent"), + ) + class Meta: verbose_name = _("workflow trigger") verbose_name_plural = _("workflow triggers") diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index c1bc4870e..123699135 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -1287,6 +1287,9 @@ class WorkflowTriggerSerializer(serializers.ModelSerializer): "filter_path", "filter_filename", "filter_mailrule", + "filter_has_tags", + "filter_has_correspondent", + "filter_has_document_type", ] def validate(self, attrs):