From c4e74a264ecc94f6d320110e69464274162a1d14 Mon Sep 17 00:00:00 2001
From: Alex ORLUC <alex.orluc@maarch.org>
Date: Wed, 22 Jul 2020 08:57:13 +0000
Subject: [PATCH] FEAT #14097 TIME 5 add keyword destination field

(cherry picked from commit f001e1ba2f1b7c1932b37d667578247e3beebb0a)
---
 .../diffusions/diffusions-list.component.ts   | 34 +++++++++++++++----
 .../indexing-form.component.html              |  2 +-
 .../indexing-form/indexing-form.component.ts  | 27 ++++++++++-----
 3 files changed, 48 insertions(+), 15 deletions(-)

diff --git a/src/frontend/app/diffusions/diffusions-list.component.ts b/src/frontend/app/diffusions/diffusions-list.component.ts
index 0ebd0f95aa4..61356135b92 100644
--- a/src/frontend/app/diffusions/diffusions-list.component.ts
+++ b/src/frontend/app/diffusions/diffusions-list.component.ts
@@ -9,6 +9,7 @@ import { of } from 'rxjs';
 import { AlertComponent } from '../../plugins/modal/alert.component';
 import { MatDialog } from '@angular/material';
 import { FunctionsService } from '../../service/functions.service';
+import { HeaderService } from '../../service/header.service';
 
 @Component({
     selector: 'app-diffusions-list',
@@ -46,6 +47,11 @@ export class DiffusionsListComponent implements OnInit {
      */
     @Input('entityId') entityId: any = null;
 
+    /**
+     * Category identifier to specify the context to load listModel
+     */
+    @Input() categoryId: any = null;
+
     /**
      * For manage current loaded list
      */
@@ -85,24 +91,24 @@ export class DiffusionsListComponent implements OnInit {
         private notify: NotificationService,
         private renderer: Renderer2,
         public dialog: MatDialog,
-        public functions: FunctionsService
+        public functions: FunctionsService,
+        private headerService: HeaderService
     ) { }
 
     async ngOnInit(): Promise<void> {
 
         await this.initRoles();
-
         if (this.resId !== null && this.resId != 0 && this.target !== 'redirect') {
             this.loadListinstance(this.resId);
         } else if ((this.resId === null || this.resId == 0) && !this.functions.empty(this.entityId)) {
-            this.loadListModel(this.entityId);
+            this.loadListModel(this.entityId, false, this.categoryId === 'outgoing');
         }
         this.loading = false;
     }
 
     drop(event: CdkDragDrop<string[]>) {
         if (event.previousContainer === event.container) {
-            //moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
+            // moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
         } else if (event.container.id != 'dest') {
             transferArrayItem(event.previousContainer.data,
                 event.container.data,
@@ -119,19 +125,35 @@ export class DiffusionsListComponent implements OnInit {
         return true;
     }
 
-    async loadListModel(entityId: number, destResource: boolean = false) {
+    async loadListModel(entityId: number, destResource: boolean = false, destCurrentUser: boolean = false) {
         this.loading = true;
         this.currentEntityId = entityId;
         this.userDestList = [];
 
         const listTemplates: any = await this.getListModel(entityId);
         this.removeAllItems();
-
         if (listTemplates.length > 0) {
             listTemplates[0].forEach((element: any) => {
                 this.diffList[element.item_mode].items.push(element);
             });
         }
+
+        // CASE IF CURRENT USER IS DEST (IN OUTGOING CATEGORY CASE)
+        if (destCurrentUser && this.headerService.user.entities[0].id === entityId) {
+            this.diffList['dest'].items = [
+                {
+                    item_mode: 'dest',
+                    item_type: 'user',
+                    itemSerialId: this.headerService.user.id,
+                    itemId: '',
+                    itemLabel: `${this.headerService.user.firstname} ${this.headerService.user.lastname}`,
+                    itemSubLabel: this.headerService.user.entities[0].entity_label,
+                    difflist_type: 'entity_id',
+                    process_date: null,
+                    process_comment: null,
+                }
+            ];
+        }
         if (this.resId !== null) {
             const listInstance: any = await this.getListinstance(this.resId);
 
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 2dd5a5474f4..1aa758fadad 100644
--- a/src/frontend/app/indexation/indexing-form/indexing-form.component.html
+++ b/src/frontend/app/indexation/indexing-form/indexing-form.component.html
@@ -186,7 +186,7 @@
                                     <i class="fas fa-check fieldFull" *ngIf="!adminMode && arrFormControl['diffusionList'].valid && !isEmptyField(field)"></i>
                                 </div>
                             </div>
-                            <app-diffusions-list #appDiffusionsList [resId]="resId" [entityId]="arrFormControl[field.identifier].value" [diffFormControl]="arrFormControl['diffusionList']" [allowedEntities]="field.allowedEntities" [target]="'indexation'" (triggerEvent)="changeDestination($event,field.allowedEntities)">
+                            <app-diffusions-list #appDiffusionsList [resId]="resId" [entityId]="arrFormControl[field.identifier].value" [diffFormControl]="arrFormControl['diffusionList']" [allowedEntities]="field.allowedEntities" [target]="'indexation'" [categoryId]="currentCategory" (triggerEvent)="changeDestination($event,field.allowedEntities)">
                             </app-diffusions-list>
                             <mat-divider></mat-divider>
                         </div>
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 3f640ca998e..9622995c3b2 100755
--- a/src/frontend/app/indexation/indexing-form/indexing-form.component.ts
+++ b/src/frontend/app/indexation/indexing-form/indexing-form.component.ts
@@ -466,7 +466,15 @@ export class IndexingFormComponent implements OnInit {
                 tap((data: any) => {
                     if (this.adminMode) {
                         let title = '';
-                        elem.values = data.entities.map((entity: any) => {
+                        elem.values = [
+                            {
+                                id: '#myPrimaryEntity',
+                                title: this.lang.myPrimaryEntity,
+                                label: `<i class="fa fa-hashtag"></i>&nbsp;${this.lang.myPrimaryEntity}`,
+                                disabled: false
+                            }
+                        ];
+                        elem.values = elem.values.concat(data.entities.map((entity: any) => {
                             title = entity.entity_label;
 
                             for (let index = 0; index < entity.level; index++) {
@@ -477,15 +485,18 @@ export class IndexingFormComponent implements OnInit {
                                 title: title,
                                 label: entity.entity_label,
                                 disabled: false
-                            }
-                        });
-
+                            };
+                        }));
                     } else {
                         let title = '';
-
-                        let defaultVal = data.entities.filter((entity: any) => entity.enabled === true && entity.id === elem.default_value);
-                        elem.default_value = defaultVal.length > 0 ? defaultVal[0].id : null;
-                        this.arrFormControl[elem.identifier].setValue(defaultVal.length > 0 ? defaultVal[0].id : '');
+                        if (elem.default_value === '#myPrimaryEntity') {
+                            elem.default_value = this.headerService.user.entities[0].id;
+                            this.arrFormControl[elem.identifier].setValue(elem.default_value);
+                        } else {
+                            const defaultVal = data.entities.filter((entity: any) => entity.enabled === true && entity.id === elem.default_value);
+                            elem.default_value = defaultVal.length > 0 ? defaultVal[0].id : null;
+                            this.arrFormControl[elem.identifier].setValue(defaultVal.length > 0 ? defaultVal[0].id : '');
+                        }
                         elem.values = data.entities.map((entity: any) => {
                             title = entity.entity_label;
 
-- 
GitLab