From ba6302fa4279ce9ea97de7497af7be01e9d2469f Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sat, 16 Sep 2023 23:44:05 -0700 Subject: [PATCH] Refactoring, filters to and, show sources on list Show sources on template list, update some translation strings Make filters and minor testing --- ...mption-template-edit-dialog.component.html | 8 +++--- ...sumption-template-edit-dialog.component.ts | 10 ++++---- .../mail-rule-edit-dialog.component.html | 1 + .../consmption-templates-list.component.html | 2 ++ .../consmption-templates-list.component.ts | 16 ++++++++++-- src/documents/consumer.py | 12 ++++----- src/documents/tests/test_consumer.py | 25 +++++++++++++++++++ 7 files changed, 56 insertions(+), 18 deletions(-) diff --git a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html index 3981bc8be..70e8c050d 100644 --- a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.html @@ -8,11 +8,11 @@
- -

Paperless-ngx will process mails that match any of the filters specified below.

+ +

Paperless-ngx will process mails that match all of the filters specified below.

- - + +
diff --git a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts index e6df00b23..7553803a6 100644 --- a/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component.ts @@ -17,18 +17,18 @@ import { UserService } from 'src/app/services/rest/user.service' import { SettingsService } from 'src/app/services/settings.service' import { EditDialogComponent } from '../edit-dialog.component' -const SOURCE_OPTIONS = [ +export const DOCUMENT_SOURCE_OPTIONS = [ { id: DocumentSource.ConsumeFolder, - name: $localize`Documents uploaded via consume folder`, + name: $localize`Consume Folder`, }, { id: DocumentSource.ApiUpload, - name: $localize`Documents uploaded via api upload`, + name: $localize`API Upload`, }, { id: DocumentSource.MailFetch, - name: $localize`Documents uploaded via mail fetch`, + name: $localize`Mail Fetch`, }, ] @@ -100,6 +100,6 @@ export class ConsumptionTemplateEditDialogComponent extends EditDialogComponent< } get sourceOptions() { - return SOURCE_OPTIONS + return DOCUMENT_SOURCE_OPTIONS } } diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html index 9dcefa064..b45035a4d 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.html @@ -26,6 +26,7 @@
+

Assignments specified here will supersede any consumption templates.

diff --git a/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.html b/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.html index 502eadb40..472097460 100644 --- a/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.html +++ b/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.html @@ -11,6 +11,7 @@ Name + Document Sources File name filter Path filter Actions @@ -19,6 +20,7 @@ + {{getSourceList(template)}} {{template.filter_filename}} {{template.filter_path}} diff --git a/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.ts b/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.ts index ce7433453..3ff601fd6 100644 --- a/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.ts +++ b/src-ui/src/app/components/manage/consmption-templates-list/consmption-templates-list.component.ts @@ -2,11 +2,17 @@ import { Component, OnInit } from '@angular/core' import { ConsumptionTemplateService } from 'src/app/services/rest/consumption-template.service' import { ComponentWithPermissions } from '../../with-permissions/with-permissions.component' import { Subject, takeUntil } from 'rxjs' -import { PaperlessConsumptionTemplate } from 'src/app/data/paperless-consumption-template' +import { + DocumentSource, + PaperlessConsumptionTemplate, +} from 'src/app/data/paperless-consumption-template' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { ToastService } from 'src/app/services/toast.service' import { PermissionsService } from 'src/app/services/permissions.service' -import { ConsumptionTemplateEditDialogComponent } from '../../common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component' +import { + ConsumptionTemplateEditDialogComponent, + DOCUMENT_SOURCE_OPTIONS, +} from '../../common/edit-dialog/consumption-template-edit-dialog/consumption-template-edit-dialog.component' import { ConfirmDialogComponent } from '../../common/confirm-dialog/confirm-dialog.component' import { EditDialogMode } from '../../common/edit-dialog/edit-dialog.component' @@ -45,6 +51,12 @@ export class ConsmptionTemplatesListComponent }) } + getSourceList(template: PaperlessConsumptionTemplate): string { + return template.sources + .map((id) => DOCUMENT_SOURCE_OPTIONS.find((s) => s.id === id).name) + .join(', ') + } + editTemplate(rule: PaperlessConsumptionTemplate) { const modal = this.modalService.open( ConsumptionTemplateEditDialogComponent, diff --git a/src/documents/consumer.py b/src/documents/consumer.py index cd505f4c2..b91267ce6 100644 --- a/src/documents/consumer.py +++ b/src/documents/consumer.py @@ -604,15 +604,15 @@ class Consumer(LoggingMixin): if int(input_doc.source) in [int(x) for x in list(template.sources)] and ( ( - template.filter_filename is not None - and fnmatch( + len(template.filter_filename) == 0 + or fnmatch( input_doc.original_file.name.lower(), template.filter_filename.lower(), ) ) - or ( - template.filter_path is not None - and input_doc.original_file.match(template.filter_path) + and ( + len(template.filter_path) == 0 + or input_doc.original_file.match(template.filter_path) ) ): self.log.info(f"Document matched consumption template {template.name}") @@ -720,8 +720,6 @@ class Consumer(LoggingMixin): storage_type = Document.STORAGE_TYPE_UNENCRYPTED - print("override_title", self.override_title) - with open(self.path, "rb") as f: document = Document.objects.create( title=( diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index 70227b0db..fd94e6a90 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -22,6 +22,7 @@ from documents.models import Correspondent from documents.models import Document from documents.models import DocumentType from documents.models import FileInfo +from documents.models import StoragePath from documents.models import Tag from documents.parsers import DocumentParser from documents.parsers import ParseError @@ -431,6 +432,16 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertEqual(document.document_type.id, dt.id) self._assert_first_last_send_progress() + def testOverrideStoragePath(self): + sp = StoragePath.objects.create(name="test") + + document = self.consumer.try_consume_file( + self.get_test_file(), + override_storage_path_id=sp.pk, + ) + self.assertEqual(document.storage_path.id, sp.id) + self._assert_first_last_send_progress() + def testOverrideTags(self): t1 = Tag.objects.create(name="t1") t2 = Tag.objects.create(name="t2") @@ -445,6 +456,20 @@ class TestConsumer(DirectoriesMixin, FileSystemAssertsMixin, TestCase): self.assertIn(t3, document.tags.all()) self._assert_first_last_send_progress() + def testOverrideTitlePlaceholders(self): + c = Correspondent.objects.create(name="Correspondent Name") + dt = DocumentType.objects.create(name="DocType Name") + + document = self.consumer.try_consume_file( + self.get_test_file(), + override_correspondent_id=c.pk, + override_document_type_id=dt.pk, + override_title="{correspondent}{document_type} {added_month}-{added_year_short}", + ) + now = timezone.now() + self.assertEqual(document.title, f"{c.name}{dt.name} {now.strftime('%m-%y')}") + self._assert_first_last_send_progress() + def testNotAFile(self): self.assertRaisesMessage( ConsumerError,