mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05: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
	 Michael Shamoon
					Michael Shamoon