mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 03:16:10 -06:00 
			
		
		
		
	Working mail rule & account edit
This commit is contained in:
		@@ -9,15 +9,16 @@
 | 
			
		||||
      <div class="col">
 | 
			
		||||
        <app-input-text i18n-title title="Name" formControlName="name" [error]="error?.name"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Order" formControlName="order" [error]="error?.order"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Account" formControlName="account" [error]="error?.account"></app-input-text>
 | 
			
		||||
        <app-input-select i18n-title title="Account" [items]="accounts" formControlName="account"></app-input-select>
 | 
			
		||||
        <app-input-text i18n-title title="Folder" formControlName="folder" [error]="error?.folder"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" [error]="error?.filter_attachment_filename"></app-input-text>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="col">
 | 
			
		||||
        <app-input-number i18n-title title="Maximum age" formControlName="maximum_age" [error]="error?.maximum_age"></app-input-number>
 | 
			
		||||
        <app-input-select i18n-title title="Attachment type" [items]="attachmentTypeOptions" formControlName="attachment_type"></app-input-select>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div class="col">
 | 
			
		||||
        <app-input-text i18n-title title="Filter from" formControlName="filter_from" [error]="error?.filter_from"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Filter subject" formControlName="filter_subject" [error]="error?.filter_subject"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Filter body" formControlName="filter_body" [error]="error?.filter_body"></app-input-text>
 | 
			
		||||
        <app-input-text i18n-title title="Filter attachment filename" formControlName="filter_attachment_filename" [error]="error?.filter_attachment_filename"></app-input-text>
 | 
			
		||||
        <app-input-select i18n-title title="Action" [items]="actionOptions" formControlName="attachment_type"></app-input-select>
 | 
			
		||||
        <app-input-text i18n-title title="Action parameter" formControlName="action_parameter" [error]="error?.action_parameter"></app-input-text>
 | 
			
		||||
      </div>
 | 
			
		||||
 
 | 
			
		||||
@@ -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<PaperlessMailRule> {
 | 
			
		||||
  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())
 | 
			
		||||
 
 | 
			
		||||
@@ -234,8 +234,8 @@
 | 
			
		||||
 | 
			
		||||
            <li *ngFor="let account of mailAccounts" class="list-group-item" [formGroupName]="account.id">
 | 
			
		||||
              <div class="row">
 | 
			
		||||
                <div class="col"><button class="btn btn-link p-0" type="button" (click)="editMailAccount(account)">{{account.name}}</button></div>
 | 
			
		||||
                <div class="col">{{account.imap_server}}</div>
 | 
			
		||||
                <div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editMailAccount(account)">{{account.name}}</button></div>
 | 
			
		||||
                <div class="col d-flex align-items-center">{{account.imap_server}}</div>
 | 
			
		||||
                <div class="col">
 | 
			
		||||
                  <div class="btn-group">
 | 
			
		||||
                    <button class="btn btn-primary" type="button" (click)="editMailAccount(account)" i18n>Edit</button>
 | 
			
		||||
@@ -261,8 +261,8 @@
 | 
			
		||||
 | 
			
		||||
            <li *ngFor="let rule of mailRules" class="list-group-item" [formGroupName]="rule.id">
 | 
			
		||||
              <div class="row">
 | 
			
		||||
                <div class="col"><button class="btn btn-link p-0" type="button" (click)="editMailRule(rule)">{{rule.name}}</button></div>
 | 
			
		||||
                <div class="col">{{rule.account.name}}</div>
 | 
			
		||||
                <div class="col d-flex align-items-center"><button class="btn btn-link p-0" type="button" (click)="editMailRule(rule)">{{rule.name}}</button></div>
 | 
			
		||||
                <div class="col d-flex align-items-center">{{(mailAccountService.getCached(rule.account) | async)?.name}}</div>
 | 
			
		||||
                <div class="col">
 | 
			
		||||
                  <div class="btn-group">
 | 
			
		||||
                    <button class="btn btn-primary" type="button" (click)="editMailRule(rule)" i18n>Edit</button>
 | 
			
		||||
 
 | 
			
		||||
@@ -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) {
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user