From cb59778f064889ddb8c2fff3296f800bec5f7858 Mon Sep 17 00:00:00 2001
From: Mounir Nayab <mounir.nayab@xelians.fr>
Date: Tue, 21 Jul 2020 11:53:42 +0200
Subject: [PATCH] [FENIX-58] add siteCode to user creation & update

---
 .../iam/internal/server/user/converter/UserConverter.java | 2 +-
 .../internal/server/user/service/UserInternalService.java | 4 ++++
 .../server/user/service/UserInternalServiceIntegTest.java | 8 +++++++-
 .../src/app/modules/models/user/user.interface.ts         | 1 +
 .../src/app/user/user-create/user-create.component.html   | 6 ++++++
 .../src/app/user/user-create/user-create.component.scss   | 5 +++++
 .../src/app/user/user-create/user-create.component.ts     | 3 ++-
 .../user-information-tab.component.html                   | 8 ++++++++
 .../user-information-tab.component.spec.ts                | 6 ++++--
 .../user-information-tab.component.ts                     | 6 ++++--
 10 files changed, 42 insertions(+), 7 deletions(-)

diff --git a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java
index 14093fd7..ba8efc20 100644
--- a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java
+++ b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/converter/UserConverter.java
@@ -89,7 +89,7 @@ public class UserConverter implements Converter<UserDto, User> {
      */
     public static final String BLOCKED_DURATION = "Durée du blocage";
 
-    public static final String SITE_CODE = "siteCode";
+    public static final String SITE_CODE = "Code du site";
 
     private final GroupRepository groupRepository;
 
diff --git a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java
index 47d4be61..8c3cdee1 100644
--- a/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java
+++ b/api/api-iam/iam-internal/src/main/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalService.java
@@ -559,6 +559,10 @@ public class UserInternalService extends VitamUICrudService<UserDto, User> {
                     }
                     addressService.processPatch(user.getAddress(), CastUtils.toMap(entry.getValue()), logbooks);
                     break;
+                case "siteCode" :
+                    logbooks.add(new EventDiffDto(UserConverter.SITE_CODE, user.getSiteCode(), entry.getValue()));
+                    user.setSiteCode(CastUtils.toString(entry.getValue()));
+                    break;
                 default :
                     throw new IllegalArgumentException("Unable to patch group " + user.getId() + ": key " + entry.getKey() + " is not allowed");
             }
diff --git a/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java b/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java
index ca6223e8..97cdb7d5 100644
--- a/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java
+++ b/api/api-iam/iam-internal/src/test/java/fr/gouv/vitamui/iam/internal/server/user/service/UserInternalServiceIntegTest.java
@@ -307,6 +307,7 @@ public final class UserInternalServiceIntegTest extends AbstractLogbookIntegrati
         final GroupDto group = new GroupDto();
         group.setEnabled(true);
         group.setCustomerId(customerId);
+        user.setSiteCode("001");
         Mockito.when(customerRepository.findById(any())).thenReturn(Optional.of(customer));
         Mockito.when(groupInternalService.getOne(any(), any(), any())).thenReturn(group);
         Mockito.when(internalSecurityService.isLevelAllowed(any())).thenReturn(true);
@@ -338,6 +339,7 @@ public final class UserInternalServiceIntegTest extends AbstractLogbookIntegrati
                 + "\"Statut\":\"ENABLED\","
                 + "\"Subrogeable\":\"false\","
                 + "\"OTP\":\"true\","
+                + "\"Code du site\":\"001\","
                 + "\"Nom de la rue\":\"rue faubourg poissoniére\","
                 + "\"Code postal\":\"75009\","
                 + "\"Ville\":\"paris\","
@@ -400,9 +402,13 @@ public final class UserInternalServiceIntegTest extends AbstractLogbookIntegrati
         internalUserService.patch(partialDto);
         partialDto.remove("otp");
 
+        partialDto.put("siteCode", "001");
+        internalUserService.patch(partialDto);
+        partialDto.remove("siteCode");
+
         final Collection<Event> events = eventRepository
                 .findAll(Query.query(Criteria.where("obId").is(user.getIdentifier()).and("evType").is(EventType.EXT_VITAMUI_UPDATE_USER)));
-        assertThat(events).hasSize(11);
+        assertThat(events).hasSize(12);
 
     }
 
diff --git a/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts b/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts
index 9bb0030c..53229d08 100644
--- a/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts
+++ b/ui/ui-frontend-common/src/app/modules/models/user/user.interface.ts
@@ -57,5 +57,6 @@ export interface User extends Id {
   lastConnection: string;
   readonly: boolean;
   address: Address;
+  siteCode: string;
 
 }
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html
index 36cd3059..0ef17962 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.html
@@ -198,6 +198,12 @@
           </div>
         </ng-container>
 
+        <div>
+          <vitamui-common-input class="field-site-code" formControlName="siteCode" placeholder="Code du site"
+                                i18n-placeholder="user create siteCode@@userCreateSiteCode">
+          </vitamui-common-input>
+        </div>
+
         <div class="actions">
           <button type="button" class="btn primary" cdkStepperNext [disabled]="form.get('address').pending || form.get('address').invalid"
             i18n="user create next step otp@@userCreateNextStepOtpButton">
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.scss b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.scss
index 70c07b7b..f708dbbe 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.scss
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.scss
@@ -68,6 +68,11 @@ h2 {
     margin-right: $field-spacing;
 }
 
+.field-site-code {
+  width: 160px;
+  margin-right: $field-spacing;
+}
+
 .field-city {
     width: 260px;
     margin-right: $field-spacing;
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts
index 7a47d721..df9764f8 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-create/user-create.component.ts
@@ -140,7 +140,8 @@ export class UserCreateComponent implements OnInit, OnDestroy {
           zipCode: [null],
           city: [null],
           country: ['FR']
-        })
+        }),
+        siteCode: [null],
       },
       { validator: UserValidators.missingPhoneNumber }
     );
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.html b/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.html
index 218cf69b..9b225692 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.html
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.html
@@ -99,6 +99,14 @@
     </div>
   </ng-container>
 
+  <div class="row">
+    <div class="col-6 form-control">
+      <vitamui-common-editable-input formControlName="siteCode" label="Code du site"
+                                     i18n-label="user info tab siteCode@@UserInfoTabSiteCode">
+      </vitamui-common-editable-input>
+    </div>
+  </div>
+
   <div class="row">
     <div class="col-6 form-control">
       <vitamui-common-editable-input formControlName="level" label="Niveau du groupe"
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.spec.ts b/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.spec.ts
index e38e7e2b..a6b7bd3d 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.spec.ts
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.spec.ts
@@ -74,7 +74,8 @@ let expectedUser: User = {
       zipCode: '75009',
       city: 'paris',
       country: 'france'
-  }
+  },
+  siteCode: '001'
 };
 
 let expectedCustomer: Customer = {
@@ -182,7 +183,8 @@ describe('UserInfoTabComponent', () => {
           zipCode: '75009',
           city: 'paris',
           country: 'france'
-      }
+      },
+      siteCode: '001'
     };
     expectedCustomer = {
       id: 'idCustomer',
diff --git a/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.ts b/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.ts
index f858d77b..42585437 100644
--- a/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.ts
+++ b/ui/ui-frontend/projects/identity/src/app/user/user-preview/user-information-tab/user-information-tab.component.ts
@@ -85,7 +85,8 @@ export class UserInfoTabComponent implements OnChanges {
       zipCode: string,
       city: string,
       country: string,
-    }
+    },
+    siteCode: string
   };
   clientEmailDomains: string[];
 
@@ -115,7 +116,8 @@ export class UserInfoTabComponent implements OnChanges {
         zipCode: [null, Validators.required],
         city: [null, Validators.required],
         country: [null, Validators.required],
-      })
+      }),
+      siteCode: [null],
     });
 
     this.form.get('mobile').valueChanges.subscribe(() => {
-- 
GitLab