diff --git a/src/frontend/app/administration/contact/modal/contact-modal.component.html b/src/frontend/app/administration/contact/modal/contact-modal.component.html index b966502ee29e96d009f275f087f0367c93f45503..5399d0f927361c12be855350b604229260874ca3 100644 --- a/src/frontend/app/administration/contact/modal/contact-modal.component.html +++ b/src/frontend/app/administration/contact/modal/contact-modal.component.html @@ -10,7 +10,7 @@ <mat-sidenav-container> <mat-sidenav-content> <app-contact-form *ngIf="mode === 'update'" [creationMode]="creationMode" [contactId]="data.contactId" - (onSubmitEvent)="dialogRef.close($event)"></app-contact-form> + (onSubmitEvent)="dialogRef.close($event)" (linkContact)="linkContact($event)"></app-contact-form> <app-contact-detail *ngIf="mode === 'read'" [contact]="contact"></app-contact-detail> </mat-sidenav-content> <mat-sidenav #drawer position='end' mode="side" style="overflow-x:hidden;width: 50%;" autoFocus="false"> diff --git a/src/frontend/app/administration/contact/modal/contact-modal.component.ts b/src/frontend/app/administration/contact/modal/contact-modal.component.ts index 1bb816e46a4ba8cede18a3a0db53f0ea014f4ad7..b245563b48c9913b17803fc7c22959cf8bd348a9 100644 --- a/src/frontend/app/administration/contact/modal/contact-modal.component.ts +++ b/src/frontend/app/administration/contact/modal/contact-modal.component.ts @@ -1,10 +1,14 @@ import { Component, Inject, ViewChild, Renderer2, OnInit } from '@angular/core'; -import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; +import { MAT_DIALOG_DATA, MatDialogRef, MatDialog } from '@angular/material/dialog'; import { TranslateService } from '@ngx-translate/core'; import { HttpClient } from '@angular/common/http'; import { PrivilegeService } from '@service/privileges.service'; import { HeaderService } from '@service/header.service'; import { MatSidenav } from '@angular/material/sidenav'; +import { ConfirmComponent } from '@plugins/modal/confirm.component'; +import { catchError, exhaustMap, filter } from 'rxjs/operators'; +import { of } from 'rxjs'; +import { NotificationService } from '@service/notification/notification.service'; declare let $: any; @@ -29,6 +33,8 @@ export class ContactModalComponent implements OnInit{ @Inject(MAT_DIALOG_DATA) public data: any, public dialogRef: MatDialogRef<ContactModalComponent>, public headerService: HeaderService, + public dialog: MatDialog, + public notify: NotificationService, private renderer: Renderer2) { } @@ -70,4 +76,23 @@ export class ContactModalComponent implements OnInit{ }, 200); } } + + linkContact(contactId: number) { + const dialogRef = this.dialog.open(ConfirmComponent, + { panelClass: 'maarch-modal', + autoFocus: false, disableClose: true, + data: { + title: this.translate.instant('lang.linkContact'), + msg: this.translate.instant('lang.goToContact') + } + }); + dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + exhaustMap(async () => this.dialogRef.close(contactId)), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); + } } diff --git a/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.html b/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.html index de8021fa303238c2acef4119f1d72ef2edf6454c..a1c8c82e7be64dcec52ce1c62a290f208f91fef2 100644 --- a/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.html +++ b/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.html @@ -20,7 +20,7 @@ </div> <div class="col-md-2" style="margin-left: auto;"> <mat-icon class="fas fa-id-card" color="primary" (click)="selectContact(contact.id)" - style="font-size: 20px; cursor: pointer;" [title]="'lang.setContactInfos' | translate"> + style="font-size: 20px; cursor: pointer;" [title]="!data.fromAdministration ? ('lang.associateContactToDoc' | translate) : ('lang.setContactInfos' | translate)"> </mat-icon> </div> </div> diff --git a/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.ts b/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.ts index 6623315bb4a6d9450039d83797f24325bcbe576d..12ed4cdf8f4eae71f07fdc7f77e07552012cf156 100644 --- a/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.ts +++ b/src/frontend/app/administration/contact/page/form/contactSearchModal/contact-search-modal.component.ts @@ -25,7 +25,7 @@ export class ContactSearchModalComponentComponent implements OnInit { ) { } ngOnInit(): void { - this.contactResult = JSON.parse(JSON.stringify(this.data)); + this.contactResult = JSON.parse(JSON.stringify(this.data.contacts)); this.loading = false; } diff --git a/src/frontend/app/administration/contact/page/form/contacts-form.component.html b/src/frontend/app/administration/contact/page/form/contacts-form.component.html index f7a7a3cc7f0e3c4f71b0c00793f60189b2e30b9d..098083b5ada6fb4054c200c0496f67ecc6e85e9c 100644 --- a/src/frontend/app/administration/contact/page/form/contacts-form.component.html +++ b/src/frontend/app/administration/contact/page/form/contacts-form.component.html @@ -78,11 +78,11 @@ </div> <div style="display: flex; flex: 1; align-items:flex-start;"> <div *ngIf="autocompleteContactName.length > 0 && !contactChanged" class="alert-message alert-message-info" role="alert"> - <div [ngStyle]="{'padding': autocompleteContactName.length === 1 ? '10px' : '0px'}" style="margin: 13px; width: 100% !important;"> + <div [ngStyle]="{'padding': autocompleteContactName.length === 1 ? '10px' : '0px'}" style="margin: 13px; width: auto;"> <div style="margin-top: -7px; margin-bottom: 2px;"> {{'lang.contact' | translate}} <ng-container> <b>{{contactService.formatContact(autocompleteContactName[0])}}</b></ng-container> {{'lang.find' | translate}} - <a style="cursor: pointer;font-weight:bold;font-style: italic;" (click)="setContact(autocompleteContactName[0].id)">{{'lang.click' | translate}} {{'lang.here' | translate}}</a> {{'lang.accessContact' | translate}} + <a style="cursor: pointer;font-weight:bold;font-style: italic;" (click)="setContact(autocompleteContactName[0].id)">{{'lang.click' | translate}} {{'lang.here' | translate}}</a> {{!fromAdministration ? ('lang.associateContact' | translate) : ('lang.accessContact' | translate)}} </div> <div *ngIf="autocompleteContactName.length > 1" style="margin-bottom: -8px;"> <mat-icon color="primary" class="fas fa-angle-right" style="font-size:16px;width:14px;"></mat-icon> diff --git a/src/frontend/app/administration/contact/page/form/contacts-form.component.ts b/src/frontend/app/administration/contact/page/form/contacts-form.component.ts index 9f3f215e39e2f9b6149559ae49ca7317b09a850c..391f1cd61675dd9c5b37e31e31a8f58c8b4691e5 100644 --- a/src/frontend/app/administration/contact/page/form/contacts-form.component.ts +++ b/src/frontend/app/administration/contact/page/form/contacts-form.component.ts @@ -2,7 +2,6 @@ import { Component, OnInit, ViewChild, EventEmitter, Input, Output } from '@angu import { HttpClient } from '@angular/common/http'; import { TranslateService } from '@ngx-translate/core'; import { NotificationService } from '@service/notification/notification.service'; -import { HeaderService } from '@service/header.service'; import { MatSidenav } from '@angular/material/sidenav'; import { AppService } from '@service/app.service'; import { MatDialog } from '@angular/material/dialog'; @@ -51,6 +50,7 @@ export class ContactsFormComponent implements OnInit { @Input() actionButton: boolean = true; @Input() defaultName: string = ''; + @Output() linkContact = new EventEmitter<number>(); @Output() onSubmitEvent = new EventEmitter<number>(); countries: any = []; @@ -344,24 +344,30 @@ export class ContactsFormComponent implements OnInit { contactNameClone: any = null; + fromAdministration: boolean = false; + currentRoute: string = ''; + + constructor( public translate: TranslateService, public http: HttpClient, - private route: ActivatedRoute, private router: Router, private notify: NotificationService, - private headerService: HeaderService, public appService: AppService, public dialog: MatDialog, public contactService: ContactService, public functions: FunctionsService, - private latinisePipe: LatinisePipe + private latinisePipe: LatinisePipe, + private activatedRoute: ActivatedRoute ) { } ngOnInit(): void { this.loading = true; + this.currentRoute = this.activatedRoute.snapshot['_routerState'].url; + this.fromAdministration = this.currentRoute.includes('administration') ? true : false; + this.initBanSearch(); if (this.contactId === null) { @@ -1213,22 +1219,26 @@ export class ContactsFormComponent implements OnInit { } setContact(id: number) { - const dialogRef = this.dialog.open(ConfirmComponent, - { panelClass: 'maarch-modal', - autoFocus: false, disableClose: true, - data: { - title: this.translate.instant('lang.setContactInfos'), - msg: this.translate.instant('lang.goToContact') - } - }); - dialogRef.afterClosed().pipe( - filter((data: string) => data === 'ok'), - exhaustMap(() => this.router.navigate([`/administration/contacts/list/${id}`])), - catchError((err: any) => { - this.notify.handleErrors(err); - return of(false); - }) - ).subscribe(); + if (!this.fromAdministration) { + this.linkContact.emit(id); + } else { + const dialogRef = this.dialog.open(ConfirmComponent, + { panelClass: 'maarch-modal', + autoFocus: false, disableClose: true, + data: { + title: this.translate.instant('lang.setContactInfos'), + msg: this.translate.instant('lang.goToContact') + } + }); + dialogRef.afterClosed().pipe( + filter((data: string) => data === 'ok'), + exhaustMap(() => this.router.navigate([`/administration/contacts/list/${id}`])), + catchError((err: any) => { + this.notify.handleErrors(err); + return of(false); + }) + ).subscribe(); + } } showAllContact() { @@ -1236,7 +1246,10 @@ export class ContactsFormComponent implements OnInit { disableClose: true, width: '800px', panelClass: 'maarch-modal', - data: this.autocompleteContactName + data: { + contacts: this.autocompleteContactName, + fromAdministration: this.fromAdministration + } }); dialogRef.afterClosed().pipe( diff --git a/src/lang/lang-en.json b/src/lang/lang-en.json index f259c9bc61a2f2122e143ab0d3b32f4768e44aca..b606847a407e44681d9354c1d65643456135d660 100644 --- a/src/lang/lang-en.json +++ b/src/lang/lang-en.json @@ -2531,5 +2531,7 @@ "find": "find.", "showAll": "See other contacts", "setContactInfos": "Access the contact details sheet", - "goToContact": "You will lose your current changes, are you sure you want to continue?" + "goToContact": "You will lose your current changes, are you sure you want to continue?", + "associateContact": "to associate the contact with the mail / attachment.", + "associateContactToDoc": "Associate the contact with the mail / attachment" } diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json index c8a05a5cab514ea9389d669a1b9d0244aabc2f8d..25afcc83161aeca9eb9f98d46af4c61bfae21971 100644 --- a/src/lang/lang-fr.json +++ b/src/lang/lang-fr.json @@ -2526,5 +2526,7 @@ "find": "trouvé.", "showAll": "Voir les autres contacts", "setContactInfos": "Accéder à la fiche de détails du contact", - "goToContact": "Vous allez perdre vos modifications actuelles, voulez-vous vraiment continuer ?" + "goToContact": "Vous allez perdre vos modifications actuelles, voulez-vous vraiment continuer ?", + "associateContact": "pour associer ce contact au courrier/pièce jointe.", + "associateContactToDoc": "Associer ce contact au courrier/pièce jointe" }