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 14093fd7ba8361208919493da1a91dc0b53576d8..ba8efc2066d9bbabe99ba81eebb747798464d1cc 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 47d4be611246a000690b038c2f72e66c8096926b..8c3cdee1fef5d859ace6ab623adda3a6922d26ad 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 ca6223e82b8d1c55b483d6a2b8b19796f42048b7..97cdb7d5d93ea88f8404a46a583de7f9117ba51e 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 9bb0030c0a7c42a7f58ddde8082a91902ccbfd87..53229d086638bc91a50483af88fca0f97daa59d7 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 36cd3059e492f77e10f6d9c46689f5ffdb4143a8..0ef17962765357bebe8eeffdf4c8dfc9a4ad6884 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 70c07b7bb62f957b2f751f0c5165f5558a19d021..f708dbbe1e376e5b2f58c97e7de13e6367f60ea3 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 7a47d721f6c1081cd81ccacf3129c0da9d34bcc0..df9764f85a234717fbab47bcf6587efeeaabe820 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 218cf69be8a1e80c6c37612c8dfd12581e125d51..9b225692fb842771c92e130a8521cd323fc31879 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 e38e7e2bd03bfaae88e0b0870d6168308d7b211b..a6b7bd3d3ba1dde154b8f3cf266ac8f2c83e278e 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 f858d77bac78d24a36ca558aa054d58bc5a9d624..425854372315d7e1d54764f95892e9064fb1d218 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(() => {