From 7884e2544c759054b666c2e29894adb2ddfa4f10 Mon Sep 17 00:00:00 2001 From: Alex ORLUC <alex.orluc@maarch.org> Date: Wed, 12 Aug 2020 17:57:30 +0200 Subject: [PATCH] FEAT #13998 TIME 3 begin input registered mail --- .../issuing-site-input.component.html | 32 +++++++ .../issuing-site-input.component.scss | 8 ++ .../indexing/issuing-site-input.component.ts | 85 +++++++++++++++++++ src/frontend/app/document-form.module.ts | 7 +- .../indexing-form.component.html | 4 + .../indexing-form/indexing-form.component.ts | 19 +++++ src/lang/lang-fr.json | 3 +- 7 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.html create mode 100644 src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.scss create mode 100644 src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.ts diff --git a/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.html b/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.html new file mode 100644 index 00000000000..0fe6379a892 --- /dev/null +++ b/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.html @@ -0,0 +1,32 @@ +<form> + <plugin-select-search + *ngIf="!loading" + [label]="'lang.issuingSite' | translate" [placeholderLabel]="'lang.issuingSite' | translate" + [formControlSelect]="control" [datas]="issuingSiteList" + (afterSelected)="afterSelected.emit($event);setAddress($event)" style="width:100%;"> + </plugin-select-search> + <mat-card *ngIf="issuingSiteAddress !== null" color="primary"> + <i class="fas fa-map-marked-alt address-icon"></i> + <div> + {{issuingSiteAddress.siteLabel}} + </div> + <div> + {{issuingSiteAddress.addressAdditional1}} + </div> + <div> + {{issuingSiteAddress.postOfficeLabel}} + </div> + <div> + {{issuingSiteAddress.addressNumber}} {{issuingSiteAddress.addressStreet}} + </div> + <div> + {{issuingSiteAddress.addressAdditional2}} + </div> + <div> + {{issuingSiteAddress.addressPostcode}} {{issuingSiteAddress.addressTown}} + </div> + <div *ngIf="registedMailType === 'RW'"> + {{issuingSiteAddress.addressCountry}} + </div> + </mat-card> +</form> \ No newline at end of file diff --git a/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.scss b/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.scss new file mode 100644 index 00000000000..3dbc8ffbba2 --- /dev/null +++ b/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.scss @@ -0,0 +1,8 @@ +@import '../../../../../css/vars.scss'; + +.address-icon { + position: absolute; + right: 10px; + font-size: 14px; + top: 10px; +} \ No newline at end of file diff --git a/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.ts b/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.ts new file mode 100644 index 00000000000..0a3d494da2f --- /dev/null +++ b/src/frontend/app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component.ts @@ -0,0 +1,85 @@ +import { Component, OnInit, Input, ViewChild, ElementRef, Output, EventEmitter } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { FormControl } from '@angular/forms'; +import { tap, catchError, finalize } from 'rxjs/operators'; +import { of } from 'rxjs/internal/observable/of'; +import { NotificationService } from '../../../../../service/notification/notification.service'; + +@Component({ + selector: 'app-issuing-site-input', + templateUrl: 'issuing-site-input.component.html', + styleUrls: [ + 'issuing-site-input.component.scss', + '../../../../indexation/indexing-form/indexing-form.component.scss' + ], +}) + +export class IssuingSiteInputComponent implements OnInit { + + loading: boolean = false; + + issuingSiteList: any[] = []; + + issuingSiteAddress: any = null; + + /** + * FormControl used when autocomplete is used in form and must be catched in a form control. + */ + @Input() control: FormControl = new FormControl(''); + @Input() registedMailType: string = null; + + + @Output() afterSelected = new EventEmitter<string>(); + + @ViewChild('autoCompleteInput', { static: true }) autoCompleteInput: ElementRef; + + constructor( + public http: HttpClient, + private notify: NotificationService, + ) { + + } + + ngOnInit() { + if (this.registedMailType !== null) { + this.getIssuingSites(this.registedMailType); + } + } + + getIssuingSites(registeredMailType: string) { + this.registedMailType = registeredMailType; + this.loading = true; + this.http.get(`../rest/registeredMail/ranges`).pipe( + tap((data: any) => { + this.issuingSiteAddress = null; + this.issuingSiteList = data['ranges'].filter((item: any) => item.registeredMailType === registeredMailType && item.status === 'OK').map((item: any) => { + return { + ...item, + id : `${item.trackerNumber}#${item.siteId}`, + label: `${item.siteLabel} (${item.customerAccountNumber})`, + disabled: item.fullness === 100, + }; + }); + }), + finalize(() => this.loading = false), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); + } + + setAddress(id: any) { + const siteId = id.split('#')[1]; + + this.http.get(`../rest/registeredMail/sites/${siteId}`).pipe( + tap((data: any) => { + this.issuingSiteAddress = data['site']; + }), + catchError((err: any) => { + this.notify.handleSoftErrors(err); + return of(false); + }) + ).subscribe(); + } +} diff --git a/src/frontend/app/document-form.module.ts b/src/frontend/app/document-form.module.ts index 9b9c782866e..ab67eefda91 100644 --- a/src/frontend/app/document-form.module.ts +++ b/src/frontend/app/document-form.module.ts @@ -4,6 +4,7 @@ import { SharedModule } from './app-common.module'; import { IndexingFormComponent } from './indexation/indexing-form/indexing-form.component'; import { TagInputComponent } from './tag/indexing/tag-input.component'; import { FolderInputComponent } from '../app/folder/indexing/folder-input.component'; +import { IssuingSiteInputComponent } from '../app/administration/registered-mail/issuing-site/indexing/issuing-site-input.component'; import { InternationalizationModule } from '../service/translate/internationalization.module'; import { TranslateService } from '@ngx-translate/core'; @@ -16,12 +17,14 @@ import { TranslateService } from '@ngx-translate/core'; declarations: [ IndexingFormComponent, TagInputComponent, - FolderInputComponent + FolderInputComponent, + IssuingSiteInputComponent ], exports: [ IndexingFormComponent, TagInputComponent, - FolderInputComponent + FolderInputComponent, + IssuingSiteInputComponent ], entryComponents: [ ], diff --git a/src/frontend/app/indexation/indexing-form/indexing-form.component.html b/src/frontend/app/indexation/indexing-form/indexing-form.component.html index a89eac24851..aec72b2c8ce 100644 --- a/src/frontend/app/indexation/indexing-form/indexing-form.component.html +++ b/src/frontend/app/indexation/indexing-form/indexing-form.component.html @@ -201,6 +201,10 @@ <app-address-ban-input [control]="arrFormControl[field.identifier]" [admin]="adminMode" style="width:100%;"> </app-address-ban-input> </ng-container> + <ng-container *ngIf="field.identifier === 'registeredMail_issuingSite'"> + <app-issuing-site-input #appIssuingSiteInput [registedMailType]="arrFormControl['registeredMail_type'].value" [control]="arrFormControl[field.identifier]" (afterSelected)="launchEvent($event, field)" style="width:100%;"> + </app-issuing-site-input> + </ng-container> </div> <div class="fieldState"> <i class="fas fa-asterisk fieldRequired" diff --git a/src/frontend/app/indexation/indexing-form/indexing-form.component.ts b/src/frontend/app/indexation/indexing-form/indexing-form.component.ts index b018f00708a..965e2c568fa 100755 --- a/src/frontend/app/indexation/indexing-form/indexing-form.component.ts +++ b/src/frontend/app/indexation/indexing-form/indexing-form.component.ts @@ -14,6 +14,7 @@ import { FormControl, Validators, FormGroup, ValidationErrors, ValidatorFn, Abst import { DiffusionsListComponent } from '../../diffusions/diffusions-list.component'; import { FunctionsService } from '../../../service/functions.service'; import { ConfirmComponent } from '../../../plugins/modal/confirm.component'; +import { IssuingSiteInputComponent } from '../../administration/registered-mail/issuing-site/indexing/issuing-site-input.component'; @Component({ selector: 'app-indexing-form', @@ -41,6 +42,7 @@ export class IndexingFormComponent implements OnInit { @Output() loadingFormEndEvent = new EventEmitter<string>(); @ViewChild('appDiffusionsList', { static: false }) appDiffusionsList: DiffusionsListComponent; + @ViewChild('appIssuingSiteInput', { static: false }) appIssuingSiteInput: IssuingSiteInputComponent; fieldCategories: any[] = ['mail', 'contact', 'process', 'classifying']; @@ -196,6 +198,14 @@ export class IndexingFormComponent implements OnInit { values: [], enabled: true, }, + { + identifier: 'registeredMail_number', + label: this.translate.instant('lang.registeredMailNumber'), + type: 'string', + default_value: null, + values: [], + enabled: true, + }, ]; availableFieldsClone: any[] = []; @@ -685,6 +695,9 @@ export class IndexingFormComponent implements OnInit { } else if (elem.identifier === 'doctype') { await this.setDoctypeField(elem); + } else if (elem.identifier === 'registeredMail_type') { + elem.event = 'getIssuingSites'; + // await this.setDoctypeField(elem); } })); })); @@ -1118,6 +1131,12 @@ export class IndexingFormComponent implements OnInit { } } + getIssuingSites(field: any, value: any) { + if (!this.functions.empty(this.appIssuingSiteInput)) { + this.appIssuingSiteInput.getIssuingSites(value); + } + } + getCheckboxListLabel(selectedItemId: any, items: any) { return items.filter((item: any) => item.id === selectedItemId)[0].label; } diff --git a/src/lang/lang-fr.json b/src/lang/lang-fr.json index 0cf72b9abab..fe2b8ddf26c 100644 --- a/src/lang/lang-fr.json +++ b/src/lang/lang-fr.json @@ -1910,5 +1910,6 @@ "registredMailType": "Type de recommandé", "rangeNumber": "Plage", "currentNumber": "Numéro actuel", - "fullness": "Remplissage" + "fullness": "Remplissage", + "registeredMailNumber": "Numéro de recommandé" } -- GitLab