From 18ad9bcbf2865f27ca8a04bc37b210c9c8c3eb86 Mon Sep 17 00:00:00 2001 From: Michael Shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 8 Nov 2022 12:18:47 -0800 Subject: [PATCH] Working mail rule & account edit --- .../mail-rule-edit-dialog.component.html | 13 ++-- .../mail-rule-edit-dialog.component.ts | 9 +++ .../manage/settings/settings.component.html | 8 +-- .../manage/settings/settings.component.ts | 71 ++++++++++--------- src-ui/src/app/data/paperless-mail-rule.ts | 8 +-- src/documents/serialisers.py | 10 +++ 6 files changed, 72 insertions(+), 47 deletions(-) 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 0b7891e81..876b7b179 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 @@ -9,15 +9,16 @@
- + - - - -
-
+
+
+ + + +
diff --git a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts index c4faf86ab..d820e3d5d 100644 --- a/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts +++ b/src-ui/src/app/components/common/edit-dialog/mail-rule-edit-dialog/mail-rule-edit-dialog.component.ts @@ -5,6 +5,7 @@ import { first } from 'rxjs' import { EditDialogComponent } from 'src/app/components/common/edit-dialog/edit-dialog.component' import { PaperlessCorrespondent } from 'src/app/data/paperless-correspondent' import { PaperlessDocumentType } from 'src/app/data/paperless-document-type' +import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { MailAction, MailActionOptions, @@ -18,6 +19,7 @@ import { } from 'src/app/data/paperless-mail-rule' import { CorrespondentService } from 'src/app/services/rest/correspondent.service' import { DocumentTypeService } from 'src/app/services/rest/document-type.service' +import { MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' @Component({ @@ -26,17 +28,24 @@ import { MailRuleService } from 'src/app/services/rest/mail-rule.service' styleUrls: ['./mail-rule-edit-dialog.component.scss'], }) export class MailRuleEditDialogComponent extends EditDialogComponent { + accounts: PaperlessMailAccount[] correspondents: PaperlessCorrespondent[] documentTypes: PaperlessDocumentType[] constructor( service: MailRuleService, activeModal: NgbActiveModal, + accountService: MailAccountService, correspondentService: CorrespondentService, documentTypeService: DocumentTypeService ) { super(service, activeModal) + accountService + .listAll() + .pipe(first()) + .subscribe((result) => (this.accounts = result.results)) + correspondentService .listAll() .pipe(first()) diff --git a/src-ui/src/app/components/manage/settings/settings.component.html b/src-ui/src/app/components/manage/settings/settings.component.html index 03cc9f02e..0aec87033 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.html +++ b/src-ui/src/app/components/manage/settings/settings.component.html @@ -234,8 +234,8 @@
  • -
    -
    {{account.imap_server}}
    +
    +
    {{account.imap_server}}
    @@ -261,8 +261,8 @@
  • -
    -
    {{rule.account.name}}
    +
    +
    {{(mailAccountService.getCached(rule.account) | async)?.name}}
    diff --git a/src-ui/src/app/components/manage/settings/settings.component.ts b/src-ui/src/app/components/manage/settings/settings.component.ts index 8efbb486e..818ad6b14 100644 --- a/src-ui/src/app/components/manage/settings/settings.component.ts +++ b/src-ui/src/app/components/manage/settings/settings.component.ts @@ -31,7 +31,7 @@ import { ViewportScroller } from '@angular/common' import { TourService } from 'ngx-ui-tour-ng-bootstrap' import { PaperlessMailAccount } from 'src/app/data/paperless-mail-account' import { PaperlessMailRule } from 'src/app/data/paperless-mail-rule' -import { MailAccountService as MailAccountService } from 'src/app/services/rest/mail-account.service' +import { MailAccountService } from 'src/app/services/rest/mail-account.service' import { MailRuleService } from 'src/app/services/rest/mail-rule.service' import { NgbModal } from '@ng-bootstrap/ng-bootstrap' import { MailAccountEditDialogComponent } from '../../common/edit-dialog/mail-account-edit-dialog/mail-account-edit-dialog.component' @@ -477,28 +477,30 @@ export class SettingsComponent } editMailAccount(account: PaperlessMailAccount) { - console.log(account) - var modal = this.modalService.open(MailAccountEditDialogComponent, { backdrop: 'static', size: 'xl', }) modal.componentInstance.dialogMode = 'edit' modal.componentInstance.object = account - // TODO: saving - // modal.componentInstance.success - // .pipe( - // switchMap((newStoragePath) => { - // return this.storagePathService - // .listAll() - // .pipe(map((storagePaths) => ({ newStoragePath, storagePaths }))) - // }) - // ) - // .pipe(takeUntil(this.unsubscribeNotifier)) - // .subscribe(({ newStoragePath, storagePaths }) => { - // this.storagePaths = storagePaths.results - // this.documentForm.get('storage_path').setValue(newStoragePath.id) - // }) + modal.componentInstance.success + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe({ + next: (newMailAccount) => { + this.toastService.showInfo( + $localize`Saved account "${newMailAccount.name}".` + ) + this.mailAccountService.listAll().subscribe((r) => { + this.mailAccounts = r.results + this.initialize() + }) + }, + error: (e) => { + this.toastService.showError( + $localize`Error saving account: ${e.toString()}.` + ) + }, + }) } deleteMailAccount(account: PaperlessMailAccount) { @@ -517,28 +519,31 @@ export class SettingsComponent } editMailRule(rule: PaperlessMailRule) { - console.log(rule) - var modal = this.modalService.open(MailRuleEditDialogComponent, { backdrop: 'static', size: 'xl', }) modal.componentInstance.dialogMode = 'edit' modal.componentInstance.object = rule - // TODO: saving - // modal.componentInstance.success - // .pipe( - // switchMap((newStoragePath) => { - // return this.storagePathService - // .listAll() - // .pipe(map((storagePaths) => ({ newStoragePath, storagePaths }))) - // }) - // ) - // .pipe(takeUntil(this.unsubscribeNotifier)) - // .subscribe(({ newStoragePath, storagePaths }) => { - // this.storagePaths = storagePaths.results - // this.documentForm.get('storage_path').setValue(newStoragePath.id) - // }) + modal.componentInstance.success + .pipe(takeUntil(this.unsubscribeNotifier)) + .subscribe({ + next: (newMailRule) => { + this.toastService.showInfo( + $localize`Saved rule "${newMailRule.name}".` + ) + this.mailRuleService.listAll().subscribe((r) => { + this.mailRules = r.results + + this.initialize() + }) + }, + error: (e) => { + this.toastService.showError( + $localize`Error saving rule: ${e.toString()}.` + ) + }, + }) } deleteMailRule(rule: PaperlessMailRule) { diff --git a/src-ui/src/app/data/paperless-mail-rule.ts b/src-ui/src/app/data/paperless-mail-rule.ts index 31d734739..0f0e417f8 100644 --- a/src-ui/src/app/data/paperless-mail-rule.ts +++ b/src-ui/src/app/data/paperless-mail-rule.ts @@ -101,7 +101,7 @@ export interface PaperlessMailRule extends ObjectWithId { order: number - account: PaperlessMailAccount + account: number // PaperlessMailAccount.id folder: string @@ -123,11 +123,11 @@ export interface PaperlessMailRule extends ObjectWithId { assign_title_from: MailMetadataTitleOption - assign_tags?: PaperlessTag[] + assign_tags?: number[] // PaperlessTag.id - assign_document_type?: PaperlessDocumentType + assign_document_type?: number // PaperlessDocumentType.id assign_correspondent_from?: MailMetadataCorrespondentOption - assign_correspondent?: PaperlessCorrespondent + assign_correspondent?: number // PaperlessCorrespondent.id } diff --git a/src/documents/serialisers.py b/src/documents/serialisers.py index 86e0f4a12..d2fa10af9 100644 --- a/src/documents/serialisers.py +++ b/src/documents/serialisers.py @@ -716,7 +716,17 @@ class MailAccountSerializer(serializers.ModelSerializer): return mail_account +class AccountField(serializers.PrimaryKeyRelatedField): + def get_queryset(self): + return MailAccount.objects.all() + + class MailRuleSerializer(serializers.ModelSerializer): + account = AccountField(allow_null=True) + assign_correspondent = CorrespondentField(allow_null=True) + assign_tags = TagsField(many=True) + assign_document_type = DocumentTypeField(allow_null=True) + class Meta: model = MailRule depth = 1